java - NoUniqueBeanDefinitionException 当父类和子类是组件时
问题描述
我有一个父类
package com.org.pages.home;
@Component
public class HomePage extends BasePage {
}
我有一个子类
package com.org.pages.home;
@Component
public class WebHomePage extends HomePage {
}
当我尝试通过以下方式获取 HomePage 的实例时:
T page = applicationContext.getBean(registeredClass);
//Here registeredClass is of the type Class<T> and contains reference to com.org.pages.home.HomePage
它抛出一个异常:
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.org.pages.home.HomePage' available: expected single matching bean but found 2: homePage,webHomePage
问题
1. 当我明确通过我想要获取 bean 的课程时,为什么会看到这个异常?
2. 我该如何解决这个问题?请注意,我无法在任何地方自动装配这些类,因为它们大约有 40 个,这就是我使用它们实例化它们的原因
applicationContext.getBean();
感谢您的任何帮助/建议!
解决方案
默认情况下,Spring 框架会自动搜索匹配的 bean。如果同一类(包括子类)有多个 bean,则必须使用
@Qualifier("beanName")
用于按 bean 名称匹配。
在您的情况下,您可以执行以下操作:
@Component
@Qualifier("homePage")
public class HomePage extends BasePage {
}
和
@Component
@Qualifier("webHomePage")
public class WebHomePage extends HomePage {
}
现在您可以使用以下内容来获取HomePage
bean:
HomePage page = (HomePage)applicationContext.getBean("homePage");
推荐阅读
- javascript - 为什么在 useHotkeys 回调中没有更新 useState 值?
- asp.net - 带有 EF 页面的 ASP.NET MVC 在通过 return View() 发布后丢失模型数据
- javascript - 无法读取未定义 react.js 的属性“某物”
- dart - 在 Dart 中使用重复键映射实现
- java - 通过rest api返回具有静态成员的类
- xml - 我需要 xml 设计指南
- mysql - 加入id不存在的表
- r - 如何在地图ggplot2上突出显示/绘制一条纬线
- google-apps-script - 尝试通过 Google 脚本获取 GET 时身份验证失败(虽然 curl 有效)
- user-interface - 在布局中居中 QLabel