这看起来应该是微不足道的,但Google和StackOverflow似乎与Spring文档一样不合作(或者我只是不知道在哪里看)。
My Spring Boot应用程序需要手动实例化某些类。有些类有依赖关系,所以我不能使用.newInstance()
;相反,我想我需要让Spring给我DI容器中的实例。像
Class<? extends Interface> className = service.getClassName();
Interface x = SpringDI.getInstance(className);
但我似乎无法找到任何办法。我该怎么办?
修改
类名是动态解析的,我已经更新了我的示例pseuido-code以反映出来。
答案 0 :(得分:5)
如何在要实例化这些类的组件中自动装配ApplicationContext
?当ApplicationContext
实现BeanFactory
接口时,您可以调用getBean()
方法。
类似的东西:
@Autowired
private ApplicationContext applicationContext;
[...]
applicationContext.getAutowireCapableBeanFactory().getBean(clazz_name);
我不确定你为什么要这样做,因为它违背了使用Spring的目的。 (你可以不使用Spring但使用Java的反射API)
请参阅JavaDocs的这一部分:http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/BeanFactory.html