介绍
使用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(字符串名称,Class clazz) { 返回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