gpt4 book ai didi

具有相同方法名称但不同限定符的 Spring bean 无法加载

转载 作者:行者123 更新时间:2023-12-04 17:21:27 29 4
gpt4 key购买 nike

我有两个 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";
}
}

两者具有相同的方法名称。即使限定符不同,应用程序也不会加载,因为它只注入(inject)一个,并且无论在哪里注入(inject)另一个,如果因 noBeanDefinition 异常而失败,假设为 ClsB bean 限定符。

当我保持方法名称不同并且所有内容都加载时。

这种行为正常吗?为什么 Spring 加载这些 bean 时不能很好地加载它们,因为它们有不同的限定符?

最佳答案

@Qualifier注释应该用于 resolve ambiguity 的注入(inject)点至于注入(inject)哪个bean。但在示例中,您在 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);
}
}

输出:
somethingA
somethingB

关于具有相同方法名称但不同限定符的 Spring bean 无法加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54727131/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com