Java 当父类和子类是组件时,NonuniqueBeandFinitionException
我有一个家长班Java 当父类和子类是组件时,NonuniqueBeandFinitionException,java,spring,Java,Spring,我有一个家长班 package com.org.pages.home; @Component public class HomePage extends BasePage { } 我有一个小班 package com.org.pages.home; @Component public class WebHomePage extends HomePage { } 当我尝试以以下方式获取主页实例时: T page = applicationContext.getBean(register
package com.org.pages.home;
@Component
public class HomePage extends BasePage {
}
我有一个小班
package com.org.pages.home;
@Component
public class WebHomePage extends HomePage {
}
当我尝试以以下方式获取主页实例时:
T page = applicationContext.getBean(registeredClass);
//Here registeredClass is of the type Class<T> and contains reference to com.org.pages.home.HomePage
问题1.当我明确地通过了我想要获得bean的类时,为什么我会看到这个异常?
2.我怎样才能解决这个问题?请注意,我无法在任何地方自动关联这些类,因为它们大约有40个,这就是我使用
applicationContext.getBean();
谢谢你的帮助/建议 您有两个bean,它们是
HomePage
实例:HomePage
和webHomePage
因此,Spring不知道在您以这种方式调用
ApplicationContext.getBean(homePage.Class)
时需要哪个homePage
实例
请注意,如果调用ApplicationContext.getBean(WebHomePage.class)
,它将起作用,因为您只有一个WebHomePage
实例
作为检索bean的编程方式的替代方法,您可以通过传递bean名称来使用ApplicationContext.getBean(字符串名称)
,例如:
HomePage HomePage=ApplicationContext.getBean(“主页”)
或:
HomePage HomePage=ApplicationContext.getBean(“webHomePage”)
请注意,我无法自动关联这些类
任何地方都有大约40个这样的人,这就是为什么我会这样
使用
我真的不明白为什么不能使用@@utowired
。你应该把豆子自动连接到你需要的地方。一次检索40个bean会给方法和类带来太多的责任 默认情况下,Spring框架会自动搜索匹配的bean。如果同一个类(包括子类)有多个bean,那么必须使用
@Qualifier("beanName")
用于按bean名称进行匹配
在您的情况下,您可以执行以下操作:
@Component
@Qualifier("homePage")
public class HomePage extends BasePage {
}
及
现在,您可以使用以下内容获取主页
bean:
HomePage page = (HomePage)applicationContext.getBean("homePage");
WebHomePage
是一个HomePage
当获取HomePage
时,它不知道您想要哪个实例。如果我传递父类bean的名称,ApplicationContext.getBean(字符串名)会起作用吗?在某些情况下,我必须获取父类的实例。尝试一下,但我不明白为什么它不起作用。这里有两个bean:homePage
和webHomePage
。您应该能够通过指定它们来检索它们中的任何一个。我更新了一个例子。非常感谢@davidxxx。提供名字对我很有用。
@Component
@Qualifier("webHomePage")
public class WebHomePage extends HomePage {
}
HomePage page = (HomePage)applicationContext.getBean("homePage");