Springboot项目中如何让非Spring管理的类获得一个注入的Bean
作者:huangyaa729
这篇文章主要介绍了Springboot项目中如何让非Spring管理的类获得一个注入的Bean问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
Springboot让非Spring管理的类获得一个注入的Bean
由于业务需要,项目中集成了mqtt服务,在mqtt连接中需要设置个回调类,这个回调类定义为一个普通类,不通过Spring管理,但是在回调类中又需要引入数据库的操作,
采用通过注解引入的数据库框架类服务,显然不能通过简单的new Object() 来进行调用,因此需要采用一种方式引入已经注入的Bean:
通过各种尝试以及验证,找到了一种可行的方案
如下所示:
声明一个自定义的类
定义一个ApplicationContext对象 ,在需要操作的函数中,通过ApplicationContext对象引入注入的类即可:
public class MyTest{ private static ApplicationContext applicationContext; public static void setApplicationContext(ApplicationContext context) { applicationContext = context; } public static void doSomething() { RestTemplate _restTemplate = applicationContext.getBean(RestTemplate.class); ........ } }
在启动类中
得到ApplicationContext 对象,然后传递到自定义的类中,注意——只能在这个地方传入,否则无法正确获取ApplicationContext 对象;
@SpringBootApplication public class Application{ public static void main(String[] args) { final ApplicationContext applicationContext = SpringApplication.run(Application.class, args); MyTest.setApplicationContext(applicationContext); } }
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。