如何在spring中通过默认的限定符bean名称获取@Service bean

时间:2014-05-20 06:59:32

标签: java spring

我有很多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方法。

2 个答案:

答案 0 :(得分:2)

return applicationContext.getBean(qualifierName, SuperServiceImpl.class)您可能希望为SuperServiceImpl定义一个界面,而使用return applicationContext.getBean(qualifierName, SuperService.class)代替,尤其是如果您有多个实现。

当然,为了完成这项工作,您需要正确定义bean:

  • 使用XML,限定符是id元素
  • bean属性
  • 使用Javaconfig,方法的名称默认为bean名称。您可以使用name注释
  • @Bean属性覆盖该值

答案 1 :(得分:1)

找到最简单的解决方案..

1)我自动连接了ApplicationContext

2)将默认限定符名称传递给方法getBean(defaultQualifierName)

多数民众赞成......

感谢各位帮助我。