【发布时间】:2019-05-26 07:22:13
【问题描述】:
使用 @Qualifier("beanName") 和 @Component("beanName") 有什么区别吗?
如果没有,是否有首选方法?
【问题讨论】:
标签: spring
使用 @Qualifier("beanName") 和 @Component("beanName") 有什么区别吗?
如果没有,是否有首选方法?
【问题讨论】:
标签: spring
它们完全是两种不同的东西,听起来你在和我比较苹果和橙子。
@Component 用于将类声明为 Spring bean,而 @Qualifier 则无法做到这一点。
@Qualifier 旨在帮助 Spring 在有超过 1 个符合条件的 bean 进行注入时确定要注入的 bean。它通常与@Autowired 一起使用,它对注入点增加了更多约束,使得其中只能注入一个bean。
【讨论】:
通常,您在组件上使用@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,因此默认情况下始终选中它。
【讨论】: