gpt4 book ai didi

java - NoUniqueBeanDefinitionException : No qualifying bean of type : This is not returned

转载 作者:行者123 更新时间:2023-12-05 01:32:08 32 4
gpt4 key购买 nike

我将下面的 bean 定义为 A.jar 的一部分

package abc;

@Component
public class ParentInterceptor implements ClientInterceptor {

}

我通过扩展 ParentInerceptor 在不同包下的不同项目中创建了另一个 bean

package xyz;

@Component
public class ChildInterceptor extends ParentInterceptor {

}

在我的 SpringBoot 应用程序中,我定义了一个类似于下面的 bean

@ComponentScan({"abc","xyz"})
public class Application {

public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}

@Bean
public Data dataRepo(ParentInterceptor p){

}


}

当我运行 main 方法时,我希望看到 NoUniqueBeanDefinitionException,因为 2 个 bean 是同一类型。但是我看到两个 bean 都已加载并且正在使用 ParentInterceptor。是否有未抛出错误的原因?

编辑

但是,当我执行以下操作时,我能够看到抛出的错误。但是我仍然无法理解为什么在上面列出的情况下没有抛出错误。

package xyz;

@Component
public class ChildInterceptor1 extends ChildInterceptor {

}

应用类:

 @ComponentScan({"abc","xyz"})
public class Application {

public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
}

@Bean
public Data dataRepo(ChildInterceptor p){

}


}

编辑 2

我还尝试使用下面的代码检查子 bean 是否确实扩展了父 bean -

ctx.getBeansOfType(ParentInterceptor.class)

这将返回 ParentInterceptor 和 ChildInterceptor。所以我不太确定为什么 Spring 没有返回错误!

最佳答案

在您的第一个示例( parent 和 child )中,我有正确的行为,即抛出 NoUniqueBeanDefinitionException。

如果要指定注入(inject)哪个bean,可以使用@Qualifier注解:

@Bean
public Data dataRepo(@Qualifier("parentInterceptor") ParentInterceptor p) {

}

可选地,您可以为组件命名:

@Component("foo") 

并相应地更改@Qualifier。

关于java - NoUniqueBeanDefinitionException : No qualifying bean of type : This is not returned,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33350469/

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