考虑一下,我想按名称自动装配bean。
示例界面:
@FunctionalInterface
private interface TestQualifier {
void test();
}
在定义我的bean时,我有两个选择。
选项1:
在@Qualifier
定义之上使用@Bean
。
@Configuration
public class QualifierConfig {
@Bean()
@Qualifier("first")
public TestQualifier first() {
return () -> System.out.println("first");
}
@Bean()
@Qualifier("second")
public TestQualifier second() {
return () -> System.out.println("second");
}
}
选项2:
使用name
批注的@Bean
参数。
@Configuration
public class QualifierConfig {
@Bean(name = "first")
public TestQualifier first() {
return () -> System.out.println("first");
}
@Bean(name = "second")
public TestQualifier second() {
return () -> System.out.println("second");
}
}
在两种情况下,我都可以按名称自动接线。调用testAutowiring()
方法会产生预期的结果。
@Component
public class MyComponent {
@Autowired
@Qualifier("first")
private TestQualifier first;
@Autowired
@Qualifier("second")
private TestQualifier second;
public void testAutowiring() {
first.test();
second.test();
}
}
输出:
第一
秒
我的问题是:
谢谢!
答案 0 :(得分:1)
我会使用@Bean
注释:
1。它是更强大的。如果同时添加@Bean("abc")
和@Qualifier("b")
,则“ abc”名称将获胜。
2。您可以为同一个bean添加多个bean标识符。 @Qualifier
没有此属性。
示例:
@Bean({"ab", "bc"})
public MyBean myBean() {
return new MyBean();
}
在这种情况下,可以同时使用限定符“ ab”和“ bc”来访问bean。
3。@Qualifier
的主要目的是识别bean,@Bean
的主要目的是构造和初始化bean(包括其标识符)。