由于业务需要,项目中集成了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);
}
}
以上就是我采用的方法,如果有啥更好的方式,欢迎回复。