当父类和子类是组件时,出现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();

感谢您的帮助/建议!


Smart猫小萌
浏览 228回答 2
2回答

月关宝盒

您有两个HomePage实例bean&nbsp;:homePage和webHomePage。这样,Spring不会以这种方式homePage调用您想要的实例。&nbsp;getBean(Class clazz)ApplicationContext.getBean(HomePage.class)请注意,如果您调用ApplicationContext.getBean(WebHomePage.class),它将在您具有的单个实例的情况下工作WebHomePage。作为以编程方式检索Bean的替代方法,您可以ApplicationContext.getBean(String name)&nbsp;通过传递Bean名称来使用,例如:HomePage homePage = ApplicationContext.getBean("homePage")或者 :HomePage homePage = ApplicationContext.getBean("webHomePage")请注意,我无法在任何地方自动连接这些类,因为它们大约有40个,这就是为什么我使用实例化它们我真的不明白你为什么不能使用@@utowired。您应该将咖啡豆自动接线到需要它们的地方。一枪检索40个bean将给您的方法和类带来太多的责任。

达令说

默认情况下,Spring框架会自动搜索匹配的bean。如果同一类(包括子类)有多个bean,则必须使用@Qualifier("beanName")用于按bean名称进行匹配。对于您的情况,您可以执行以下操作:@Component@Qualifier("homePage")public class HomePage extends BasePage {}和@Component@Qualifier("webHomePage")public class WebHomePage extends HomePage {}现在,您可以使用以下代码获取HomePagebean:HomePage page = (HomePage)applicationContext.getBean("homePage");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java