作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将下面的 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/
我是一名优秀的程序员,十分优秀!