我有一组以两个属性为特征的bean。它们基本上是针对不同类和不同目的的序列化器。
例如,可能有一个用于本地日志的Order
序列化程序,用于记录webservice调用的Order
序列化程序,用于跟踪URL的Customer
序列化程序和用于跟踪URL的Customer
序列化程序
这就是为什么我想使用这样的两个@Qualifier
注释:
@Autowired
@Qualifier("order")
@Qualifier("url")
private Serializer<Order> orderSerializer;
不幸的是,编译器在这种情况下抱怨重复注释。是否有解决此问题的解决方法或替代解决方案?
答案 0 :(得分:10)
我知道这个问题相当陈旧,但这是自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 {
}
您应该可以在您的字段上使用这两个注释,因为它们是独立的注释。
@Autowired
@MyOrderQualifier
@MyUrlQualifier
private Serializer<Order> orderSerializer;
以下是Spring 2.5 reference documentation解释此过程的链接。请注意,它适用于Spring 2.5,可能会因更新版本的Spring而过时。
答案 1 :(得分:4)
@Qualifier("order-url")
并分别命名您的组件order-url
@Component("order-url")
答案 2 :(得分:0)
当然我不知道所有细节,但这个问题更像是Decorator pattern的任务。也许,如果有必要,你可以在Spring配置中绑定它。
或者,我同意Bozho的观点,你可以在Spring bean中使用一些名称约定,以便bean名称可以反映其责任和应用领域。