您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

带有@Qualifier的@Bean声明不起作用

带有@Qualifier的@Bean声明不起作用

我认为您@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);
   }

同样除去@QualifiereventPublisher(...)

那并不能解决所有问题。:)

如异常所示,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
  .....

}
其他 2022/1/1 18:24:25 有516人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶