【问题标题】:Difference between @Qualifier("beanName") and @Component("beanName")@Qualifier("beanName") 和 @Component("beanName") 的区别
【发布时间】:2019-05-26 07:22:13
【问题描述】:

使用 @Qualifier("beanName")@Component("beanName") 有什么区别吗? 如果没有,是否有首选方法?

【问题讨论】:

    标签: spring


    【解决方案1】:

    它们完全是两种不同的东西,听起来你在和我比较苹果和橙子。

    @Component 用于将类声明为 Spring bean,而 @Qualifier 则无法做到这一点。

    @Qualifier 旨在帮助 Spring 在有超过 1 个符合条件的 bean 进行注入时确定要注入的 bean。它通常与@Autowired 一起使用,它对注入点增加了更多约束,使得其中只能注入一个bean。

    【讨论】:

      【解决方案2】:

      通常,您在组件上使用@Component("beanName"),在您正在自动装配的类上使用@Qualifier("beanName")。例

      @Component("myComponent1")
      public class MyComponent1 implements MyComponent {
      ....
      
      }
      
      @Component("myComponent2")
      public class MyComponent2 implements MyComponent {
      ....
      
      }
      
      @Service
      public class SomeService implements MyService {
      
          @Qualifier("myComponent1")
          private MyComponent myComponent;
      
          ...
      
      }
      

      如果 bean/component 有多个实现,spring 将不知道选择哪个 bean,因此您需要使用限定符来指定哪个是正确的。

      此外,您可以在其中一个组件上使用@Primary,因此默认情况下始终选中它。

      【讨论】:

        猜你喜欢
        • 2014-03-17
        • 1970-01-01
        • 2012-02-05
        • 2019-09-23
        • 2012-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多