Java 按名称排列的Spring autowire
考虑到我想按名称自动连接bean 示例界面:Java 按名称排列的Spring autowire,java,spring,Java,Spring,考虑到我想按名称自动连接bean 示例界面: @FunctionalInterface private interface TestQualifier { void test(); } 定义bean时,我有两个选择 选项#1: @FunctionalInterface private interface TestQualifier { void test(); } 在@Bean定义上使用@Qualifier @Configuration public class Qualif
@FunctionalInterface
private interface TestQualifier {
void test();
}
定义bean时,我有两个选择
选项#1:
@FunctionalInterface
private interface TestQualifier {
void test();
}
在@Bean
定义上使用@Qualifier
@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:
@FunctionalInterface
private interface TestQualifier {
void test();
}
使用@Bean
注释的name
参数
@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();
}
}
输出:
首先
第二
我的问题是:
@FunctionalInterface
private interface TestQualifier {
void test();
}
谢谢 我会选择
@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,包括它的标识符。通常当你想自动连接一个接口,并且你的应用程序上下文中有多个bean(即接口子项)时,使用@Qualifier
。选项3:不要放任何东西,因为@bean(name)
文档:如果未指定,则bean的名称是带注释方法的名称。如果指定,则忽略方法名称。“但不会这样做,名称应该是故意的。