我认为您
@Qualifier
对文档有误解,“ 在自动装配时 , 此注释可以在字段或参数上用作候选bean的限定符。 ”
在你的情况下
@Qualifier是没有意义的。
@Bean @Qualifier("q1") public Queue queueAccountTonotification() { return new ActiveMQQueue(queueAccountToNotificationName); }相反,你应该这样做
@Bean(name = "q1") public Queue queueAccountTonotification() { return new ActiveMQQueue(queueAccountToNotificationName);}@Bean(name = "q2") public Queue queueNotificationToAccount() { return new ActiveMQQueue(queueNotificationNameToAccount); }同样除去
@Qualifier上
eventPublisher(...)
那并不能解决所有问题。:)
如异常所示,spring无法自动
Destination绑定JmsEventPublisher中的字段。因为它有两个类型为Destination(q1和q2)的bean。
为了解决这个问题,您可以做的是。
放入
@Primary其中一个bean声明,然后使用
@Qualifier。
@Primary@Bean(name = "q1") public Queue queueAccountTonotification() { return new ActiveMQQueue(queueAccountToNotificationName);}public class JmsEventPublisher implements EventPublisher { final JmsTemplate jmsTemplate; @Qualifier("q1") final Destination destination; .......... }底线是要
@Qualifier在多个相同类型的bean的情况下工作,您需要
@Primary
另一个选择是使用@Primary而不是@Primary,可以将变量命名为与Bean名称完全相同的名称,然后spring将自动为您注入正确的Bean。即
public class JmsEventPublisher implements EventPublisher { final JmsTemplate jmsTemplate; final Destination q1; // q1 or q2 .....}类似地在MemberService中
public class MemberService { @Autowired Queue q1; // q1 or q2 .....}


