我为我的组件定制了@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{
//
}
这意味着我有专门的提供商(用于添加和删除),但我也有一些共享提供商。我需要添加和删除流程。
所述如果在要自动装配的字段或参数上指定了多个属性值,则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提供商列表中,但这确实是最后的选择。