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);
}
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringCloud Finchley+Spring Boot 2.0 集成Consul的方法示例(1.2版本)
这篇文章主要介绍了SpringCloud Finchley+Spring Boot 2.0 集成Consul的方法示例(1.2版本),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-08-08
Java Spring ApplicationEvent 代码示例解析
本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、事务绑定、执行顺序),对Java Spring ApplicationEvent概念相关知识感兴趣的朋友一起看看吧2025-06-06
Java BufferedImage转换为MultipartFile方式
这篇文章主要介绍了Java BufferedImage转换为MultipartFile方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-09-09
关于Java8的foreach中使用return/break/continue产生的问题
这篇文章主要介绍了关于Java8的foreach()中使用return/break/continue产生的问题,在使用foreach()处理集合时不能使用break和continue这两个方法,也就是说不能按照普通的for循环遍历集合时那样根据条件来中止遍历,需要的朋友可以参考下2023-10-10


最新评论