是否可以在Spring中使用多个@Qualifier注释?

Fix*_*int 4 java spring dependency-injection

我有一组以两个属性为特征的bean.它们基本上是针对不同类和不同目的的序列化器.

例如,可能有Order用于本地日志的Order序列化程序,用于记录webservice调用的Customer序列化程序,用于跟踪URL的Customer序列化程序和用于跟踪URL的序列化程序.

这就是为什么我想使用这样的两个@Qualifier注释:

@Autowired
@Qualifier("order")
@Qualifier("url")
private Serializer<Order> orderSerializer;
Run Code Online (Sandbox Code Playgroud)

不幸的是,编译器在这种情况下抱怨重复注释.是否有解决此问题的解决方法或替代解决方案?

nic*_*ild 12

我知道这个问题相当陈旧,但这是自Spring 2.5以来你应该能够完成的事情.

您可以使用@Qualifier一种注释组合形式创建自己注释的注释.春天会尊重这些资格赛,好像他们是自己的.

考虑这两个注释类型,命名与您的示例类似:

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

@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface MyUrlQualifier {
}
Run Code Online (Sandbox Code Playgroud)

您应该能够在您的字段上使用这两个注释,因为它们是独立的注释.

@Autowired
@MyOrderQualifier
@MyUrlQualifier
private Serializer<Order> orderSerializer;
Run Code Online (Sandbox Code Playgroud)

以下是解释此过程的Spring 2.5参考文档的链接.请注意,它适用于Spring 2.5,可能会因更新版本的Spring而过时.


Boz*_*zho 5

@Qualifier("order-url")
Run Code Online (Sandbox Code Playgroud)

并分别命名您的组件 order-url

@Component("order-url")
Run Code Online (Sandbox Code Playgroud)