Spring boot 项目中让非Spring管理的类获得一个注入的Bean

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huangyaa729/article/details/84326721

由于业务需要,项目中集成了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);
  }
  
}

以上就是我采用的方法,如果有啥更好的方式,欢迎回复。

猜你喜欢

转载自blog.csdn.net/huangyaa729/article/details/84326721