春季:注入其他选择

时间:2018-10-12 08:23:28

标签: java spring spring-boot

我正在处理的项目是一个春季启动项目,我需要从EJB项目中迁移同一接口的多个实现。 有一项工作需要使用所有这些实例,我们想使用一种灵活的实现,例如java ejbs支持的实现:

@Inject
private @Any
Instance<FleetAnalyzerProvider> fleetAnalyzerProviders;

在源项目中,它使用了提供程序生成器:

    private void initializeProvider(String type) {
        try {
            final DeviceTypesProviderBuilder providerBuilder = new DeviceTypesProviderBuilder(type);
            final Instance qualifiedInstance = this.fleetAnalyzerProviders.select(providerBuilder);
            this.analyzerProvider = (FleetAnalyzerProvider) qualifiedInstance.get();
        } catch (final Exception e) {
            this.logger.error("[initializeProvider] Failed for type [{}] due to: {}", type, e);
        }
    }

其中DeviceTypesProviderBuilder为:

public class DeviceTypesProviderBuilder extends AnnotationLiteral<DeviceTypes> implements DeviceTypes {

    private final Type type;

    public DeviceTypesProviderBuilder(String type) {
        this.type = DeviceTypes.Type.getEnum(type);
    }

    @Override
    public Type value() {
        return type;
    }

}

和设备类型:

@Qualifier
@Retention(RUNTIME)
@Target({METHOD, PARAMETER, FIELD, TYPE})
public @interface DeviceTypes {

    Type value();

    enum Type {
        ...
    }
}

春季有类似的选择吗?

我看到了这样的语法的帖子(Autowire reference beans into list by type):

    @Autowired
    private FleetAnalyzerProvider[] fleetAnalyzerProviders;

但是,如何确定正确的提供者?

链接的spring文档中的示例太简单了,没有明确解释这种特殊可能性。

0 个答案:

没有答案