线程中无法直接使用注解的方式获取spring beans,但是线程经常需要用到bean来实现业务流程;这里有两种方式
方法1:是通过初始化线程实现类的方式通过set私有属性,把bean赋值到线程实现类中;

方法2:通过applicationcontext线程中直接获取bean;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import com.polymer.app.StartApplication;
import com.polymer.app.service.MockService;
import com.polymer.app.utils.ApplicationContextHandle;@RunWith(SpringRunner.class)
@SpringBootTest(classes = StartApplication.class)
public class TestThreadAOP {private static ExecutorService excutor = Executors.newFixedThreadPool(1);@Autowiredprivate MockService mockService;@Testpublic void testTAOP() throws InterruptedException, ExecutionException {Task t = new Task();t.setName("zhangyf");t.setMockService(mockService);excutor.execute(t);}class Task implements Runnable {private String name;private MockService mockService;public MockService getMockService() {return mockService;}public void setMockService(MockService mockService) {this.mockService = mockService;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic void run() {//方式一/*String call = mockService.call();System.out.println(call + name);*///方式二System.out.println("获取springbeans开始---");MockService mock = (MockService) ApplicationContextHandle.getBean("mockSeviceImpl");System.out.println("获取springbeans结束---");String call = mock.call();System.out.println(call + name);}}}

import org.apache.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.annotation.Configuration;@Configuration//springboot的使用applicationcontext需要使用此注解或者使用@Component初始化加载bean,否则不生效
public class ApplicationContextHandle implements ApplicationContextAware {private static ApplicationContext applicationContext;private final static Logger logger = Logger.getLogger(ApplicationContextHandle.class);@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {ApplicationContextHandle.applicationContext = applicationContext;}/** * 获取对象 * 这里重写了bean方法,起主要作用 * @param name * @return Object 一个以所给名字注册的bean的实例 * @throws BeansException */public static Object getBean(String name) throws BeansException {return applicationContext.getBean(name);}
}

以往的spring则是需要手动添加<bean id="ApplicationContextHandle" class="com.polymer.app.utils.ApplicationContextHandle"/>

转载于:https://www.cnblogs.com/zyf-yxm/p/11413037.html

springboot线程中获取spring beans相关推荐

  1. 如何在线程中获取spring 管理的bean

    问题说明 今天在web应用中用到了Java多线程的技术来并发处理一些业务,但在执行时一直会报NullPointerException的错误,问题定位了一下发现是线程中的Spring bean没有被注入 ...

  2. springboot线程中获取bean

    在线程中是无法直接使用Spring Beans,但是又需要使用Spring中的bean执行方法 1:使用ApplicationContextAware在线程中直接获取bean 创建Applicatio ...

  3. 【SpringBoot】在普通类中获取spring容器中的bean

    这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的.在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能 ...

  4. Java(多)线程中注入Spring的Bean

    问题说明 : 今天在web应用中用到了Java多线程的技术来并发处理一些业务,但在执行时一直会报NullPointerException的错误,问题定位了一下发现是线程中的Spring bean没有被 ...

  5. 在普通类中获取spring容器中的bean

    在普通类中获取spring容器中的bean 1.工具类 package com.itheima.hchat.util;import org.springframework.beans.BeansExc ...

  6. 在ServletContextListener实现类中获取spring注入对象

    由于项目需要,需在ServletContextListener监听接口实现类中调用spring注入的对象,以获取系统初始化参数.代码如下: [java] view plain copy import  ...

  7. SpringBoot 框架中 使用Spring Aop 、创建注解、创建枚举类 使用过程记录

    1.开始 在Springboot框架中引入AOP <dependency><groupId>org.springframework.boot</groupId>&l ...

  8. java-在应用中获取spring定义的bean

    因为写了些bean作为quartz的任务用spring配置了,但有些时候需要在别的类中使用这些bean,没有太仔细去研究spring,依稀记得有个getBean,到网上g了一把,发现方法不止一种,选了 ...

  9. spring初始化在ServletContextListener实现类中获取spring注入对象

    查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 由于项目须要,需在ServletContextListener监听接口实现类中调用sprin ...

最新文章

  1. 配置Centos7 SSH密钥登陆及密码密钥双重验证
  2. Django与数据库操作
  3. python123第九周测验答案2020_运用python123平台助力编程课教学
  4. linux与windows回车换行符的区别
  5. Xenix — 微软与UNIX的短暂爱恋
  6. 领域应用 | 推荐算法不够精准?让知识图谱来解决
  7. 带出7个“师弟”,支付宝BASIC College的辅导员是个伪90后
  8. 命令式编程面向算法vs声明式编程面向描述
  9. 基于单片机的水温液位自动控制系统设计
  10. cad字体安装_拿了CAD字体不知道怎么装?看过来
  11. 广西南宁机器人比赛_缤纷校园|2018年广西中小学电脑机器人竞赛开赛 南宁学子大显身手...
  12. Nginx使用stream模块分流实现端口复用
  13. 微信头像失效_微信头像地址失效踩坑记附带方案
  14. 敏捷实践之故事墙Story Board
  15. C#: 星座星盘计算算法
  16. 2021华数杯C题优秀论文思路分析01
  17. MediaPlayer播放异常问题
  18. 从Lync2010看微软UC发展
  19. 浅析基于GIS平台财政电子沙盘系统
  20. c语言地址和地址怎么比较大小,C语言精要总结-内存地址对齐与struct大小判断篇...

热门文章

  1. 群晖Docker映像下载缓慢或失败解决方案
  2. 如何能让英语水平在一年半载内得到大幅提升?(备注下)
  3. 关于operator bool () 和bool operator ==()
  4. 3055. 字符频率
  5. 一文读懂高速互联的阻抗及反射(中)
  6. 渣基础:比照Hawstein学Cracking the coding interview(4)
  7. R语言科学计数法数据改变/丢失/失准,取消科学计数法的原因和解决方法
  8. 字符编码问题三个不可见的字符(0xEF-0xBB-0xBF,即BOM)
  9. 学计算机颈椎痛,有效缓解颈椎疼痛的七个简单动作及附图 (电脑族必备)
  10. 华容道 java swing