我有很多ServiceImpl bean,但我想通过其默认名称访问特定bean,例如
class SuperServiceImpl {}
class UserServiceImpl extends SuperServiceImpl {}
class PlaceServiceImpl extends SuperServiceImpl {}
public SuperServiceImpl getServiceImpl(String qualifierName) {
// if qualifierName="userServiceImpl"
// return UserServiceImpl
}
我试图实施以下解决方案
Auto-cast Spring Beans
但是我没有在
getBean()
引用上得到ApplicationContext
方法。 最佳答案
return applicationContext.getBean(qualifierName, SuperServiceImpl.class)
您可能想为SuperServiceImpl
定义一个接口并改用return applicationContext.getBean(qualifierName, SuperService.class)
,尤其是在您有多个实现的情况下。
当然,要完成这项工作,您需要正确定义bean:
对于XML,限定符是id
元素的bean
属性。
使用Javaconfig时,方法的名称默认为Bean名称。您当然可以使用name
批注的@Bean
属性覆盖它