@Qualifier("beanName") 和 @Component("beanName") 的区别
Posted
技术标签:
【中文标题】@Qualifier("beanName") 和 @Component("beanName") 的区别【英文标题】:Difference between @Qualifier("beanName") and @Component("beanName") 【发布时间】:2019-05-26 07:22:13 【问题描述】:使用 @Qualifier("beanName")
和 @Component("beanName")
有什么区别吗?
如果没有,是否有首选方法?
【问题讨论】:
【参考方案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
,因此默认情况下始终选中它。
【讨论】:
以上是关于@Qualifier("beanName") 和 @Component("beanName") 的区别的主要内容,如果未能解决你的问题,请参考以下文章
@Qualifier、@Priority、@Primary简介
java中@Qualifier("string")是啥用法?
spring设计模式之applicationContext.getBean("beanName")思想
spring设计模式之applicationContext.getBean("beanName")思想