我有很多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属性覆盖它

10-01 14:35