我有两个 Spring Configuration 类定义如下
@Configuration
public class ClsA {
@Bean
@Qualifier("ClasA")
public String getSomething(){
return "somethingA";
}
}
@Configuration
public class ClsB {
@Bean
@Qualifier("ClsB")
public String getSomething(){
return "somethingB";
}
}
两者具有相同的方法名称。即使限定符不同,应用程序也不会加载,因为它只注入一个限定符,而无论在何处注入另一个限定符,如果失败并出现 noBeanDefinition 异常,我们就说 ClsB bean 限定符。
当我保持方法名称不同并且所有内容都加载得很顺利时。
这种行为正常吗?为什么 Spring 不能很好地加载这些 bean,因为它们有不同的限定符?
The @Qualifier
注释应该在注入点使用解决歧义至于要注入哪个bean。但在示例中,您在 bean 声明站点使用它。在声明站点,您可以通过在以下位置指定每个 bean 的名称:@Bean
注解。因此,如果您将方法保留为相同的名称,则有效的示例如下:
@Configuration
public class ClsA {
@Bean("ClasA")
public String getSomething() {
return "somethingA";
}
}
@Configuration
public class ClsB {
@Bean("ClasB")
public String getSomething() {
return "somethingB";
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {ClsB.class, ClsA.class})
public class ClsTest {
@Autowired
@Qualifier("ClasA") //this is the place where @Qualifier can be used
String smthA;
@Autowired
@Qualifier("ClasB")
String smthB;
@Test
public void test() {
System.out.println(smthA);
System.out.println(smthB);
}
}
Output:
somethingA
somethingB
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)