具有可选值的类型的Spring autowire

时间:2017-01-15 09:05:49

标签: java spring annotations autowired

我为我的组件定制了@Qualifier注释:

@Target({ElementType.FIELD,ElementType.TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface ProviderQualifier{

     ProviderType[] providerType();
}

ProviderType是枚举:

public enum ProviderType{

  ADD_PROVIDER,REMOVE_PROVIDER
}

我的组件如下所示:

@ProviderQualifier(providerType=ADD_PROVIDER)
public class AddProvider implements Providers{
   // 
}

最后,当我想要自动装配所有ADD_PROVIDER组件时:

@Autowired
@ProviderQualifier(providerType=ADD_PROVIDER)
private List<Providers> addProviders;

这很好用,但问题是当我有共享提供者时,例如:

@ProviderQualifier(providerType=ADD_PROVIDER,REMOVE_PROVIDER)
public class ValidateProvider implements Providers{
   // 
}

这意味着我有专门的提供商(用于添加和删除),但我也有一些共享提供商。我需要添加和删除流程。

如此处http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-autowired-annotation-qualifiers

所述
  

如果在要自动装配的字段或参数上指定了多个属性值,则bean定义必须匹配所有此类属性值才能被视为自动装配候选。例如,请考虑以下注释定义:

我的问题是。有没有办法配置spring autowires bean如何使其工作?

@Autowired
@ProviderQualifier(providerType=ADD_PROVIDER)
private List<Providers> addProviders;

@Autowired
@ProviderQualifier(providerType=REMOVE_PROVIDER)
private List<Providers> removeProviders;

目标是在两个自动装配列表中都有ValidateProvider,但这是不可能的,因为Spring文档autowire candidate&#34;必须匹配所有这样的属性&#34;

我可以:

@Autowired
@ProviderQualifier(providerType={REMOVE_PROVIDER,ADD_PROVIDER})
private List<Providers> commonProviders;

并手动将它们添加到专用的ADD和REMOVE提供商列表中,但这确实是最后的选择。

0 个答案:

没有答案