@Qualifier(“ beanName”)和@Component(“ beanName”)

时间:2018-12-28 13:00:22

标签: spring

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

2 个答案:

答案 0 :(得分: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 /组件的实现不止一个,spring将不知道要选择哪个bean,因此您需要使用一个限定符来指定哪个是正确的。

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

答案 1 :(得分:0)

它们完全是两回事,听起来像是您在将苹果和橙子与我进行比较。

@Component用于将类声明为Spring bean,而您无法使用@Qualifier来实现。

@Qualifier旨在帮助Spring确定如果要注入的豆超过1个,则要注入哪个bean。它通常与@Autowired一起使用,这对注入点增加了更多约束,因此只能注入一个bean。