我认为您@Qualifier
对文档有误解,“ , ”
在你的情况下@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
.....
}