我有很多 ServiceImpl bean,但我想通过其默认名称访问特定 bean,例如
class SuperServiceImpl {}
class UserServiceImpl extends SuperServiceImpl {}
class PlaceServiceImpl extends SuperServiceImpl {}
public SuperServiceImpl getServiceImpl(String qualifierName) {
// if qualifierName="userServiceImpl"
// return UserServiceImpl
}
我尝试实现以下解决方案
但我没有在 ApplicationContext
引用上获取 getBean()
方法。
最佳答案
return applicationContext.getBean(qualifierName, SuperServiceImpl.class)
您可能想要为 SuperServiceImpl
定义一个接口(interface)并使用 return applicationContext.getBean(qualifierName, SuperService) .class)
相反,特别是如果您有多个实现。
当然,要实现这一点,您需要正确定义您的 bean:
- 对于 XML,限定符是
bean
元素的id
属性 - 对于 Javaconfig,默认情况下方法的名称是 bean 名称。当然,您可以使用
@Bean
注释的name
属性覆盖它
关于java - 如何在 Spring 中通过默认限定符 bean 名称获取 @Service bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23752944/