使用Springboot如何实现多线程并注入bean

  介绍

使用Springboot如何实现多线程并注入bean ?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

场景:使用Springboot多线程,线程类无法自动注入需要的bean

通过工具类获取需要的bean

工具类代码:

进口org.springframework.beans.BeansException;
  进口org.springframework.context.ApplicationContext;
  进口org.springframework.context.ApplicationContextAware;
  进口org.springframework.stereotype.Component;/* *
  * @Description:获取bean对象的工具类
  林* @Author:张
  * @CreateDate: 2018/12/10
  */@ component
  公共类ApplicationContextProvider实现ApplicationContextAware {/* *
  *上下文对象实例
  */私有静态ApplicationContext ApplicationContext;
  
  @Override
  公共空间setApplicationContext (ApplicationContext ApplicationContext)抛出BeansException {
  这一点。applicationContext=applicationContext;
  }/* *
  *获取applicationContext
  *
  * @return
  */公共静态ApplicationContext getApplicationContext () {
  返回applicationContext;
  }/* *
  *通过名字获取Bean。
  *
  * @param名字
  * @return
  */公共静态对象getBean(字符串名称){
  返回getApplicationContext () .getBean(名称);
  }/* *
  *通过类获取Bean。
  *
  * @param clazz
  * @param & lt; T>
  * @return
  */公共静态& lt; T>T getBean (Classclazz) {
  返回getApplicationContext () .getBean (clazz);
  }/* *
  *通过名字,以及Clazz返回指定的Bean
  *
  * @param名字
  * @param clazz
  * @param & lt; T>
  * @return
  */公共静态& lt; T>T getBean(字符串名称,Classclazz) {
  返回getApplicationContext ()。getBean(名称、clazz);
  }
  }

使用方法:

在线程类的构造函数里调用工具类的getbean方法获取实例,如:

包com.ruoyi.common.utils.spring;
  
  进口org.springframework.beans.BeansException;
  进口org.springframework.beans.factory.NoSuchBeanDefinitionException;
  进口org.springframework.beans.factory.config.BeanFactoryPostProcessor;
  进口org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
  进口org.springframework.context.ApplicationContext;
  进口org.springframework.context.ApplicationContextAware;
  进口org.springframework.stereotype.Component;/* *
  *春天工具类方便在非弹簧管理环境中获取bean
  *
  * @author ruoyi
  */@ component
  最后公共类SpringUtils实现BeanFactoryPostProcessor ApplicationContextAware
  {/* *春天应用上下文环境*/私有静态ConfigurableListableBeanFactory beanFactory;
  私有静态ApplicationContext ApplicationContext=零;
  
  @Override
  公共空间postProcessBeanFactory (ConfigurableListableBeanFactory beanFactory)抛出BeansException
  {
  SpringUtils。beanFactory=beanFactory;
  }/* *
  *获取对象
  *
  * @param名字
  * @return对象一个以所给名字注册的bean的实例
  * @throws org.springframework.beans.BeansException
  *
  */@SuppressWarnings (“unchecked")
  公共静态& lt; T>T getBean(字符串名称)抛出BeansException
  {
  返回(T) beanFactory.getBean(名称);
  }/* *
  *获取类型为requiredType的对象
  *
  * @param clz
  * @return
  * @throws org.springframework.beans.BeansException
  *
  */公共静态& lt; T>T getBean (Classclz)抛出BeansException
  {
  结果T=(T) beanFactory.getBean (clz);
  返回结果;
  }/* *
  *如果BeanFactory包含一个与所给名称匹配的bean定义,则返回现实
  *
  * @param名字
  * @return布尔
  */公共静态布尔containsBean(字符串名称)
  {
  返回beanFactory.containsBean(名称);
  }/* *
  *判断以给定名字注册的bean定义是一个单例还是一个原型。如果与给定名字相应的bean定义没有被找的到,将会抛出一个异常(NoSuchBeanDefinitionException)
  *
  * @param名字
  * @return布尔
  * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
  *
  */公共静态布尔isSingleton抛出NoSuchBeanDefinitionException(字符串名称)
  {
  返回beanFactory.isSingleton(名称);
  }/* *
  * @param名字
  * @return类注册对象的类型
  * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException
  *
  */公共静态Class

使用Springboot如何实现多线程并注入bean