springboot线程中获取spring beans
线程中无法直接使用注解的方式获取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相关推荐
- 如何在线程中获取spring 管理的bean
问题说明 今天在web应用中用到了Java多线程的技术来并发处理一些业务,但在执行时一直会报NullPointerException的错误,问题定位了一下发现是线程中的Spring bean没有被注入 ...
- springboot线程中获取bean
在线程中是无法直接使用Spring Beans,但是又需要使用Spring中的bean执行方法 1:使用ApplicationContextAware在线程中直接获取bean 创建Applicatio ...
- 【SpringBoot】在普通类中获取spring容器中的bean
这段时间公司搞封闭开发,做一个联通总部的客服系统项目,是基于springboot的.在开发工程中遇到一个页面datagrid数据排序的功能,因为有多个表的数据都要用到排序功能,于是我就写了一个排序功能 ...
- Java(多)线程中注入Spring的Bean
问题说明 : 今天在web应用中用到了Java多线程的技术来并发处理一些业务,但在执行时一直会报NullPointerException的错误,问题定位了一下发现是线程中的Spring bean没有被 ...
- 在普通类中获取spring容器中的bean
在普通类中获取spring容器中的bean 1.工具类 package com.itheima.hchat.util;import org.springframework.beans.BeansExc ...
- 在ServletContextListener实现类中获取spring注入对象
由于项目需要,需在ServletContextListener监听接口实现类中调用spring注入的对象,以获取系统初始化参数.代码如下: [java] view plain copy import ...
- SpringBoot 框架中 使用Spring Aop 、创建注解、创建枚举类 使用过程记录
1.开始 在Springboot框架中引入AOP <dependency><groupId>org.springframework.boot</groupId>&l ...
- java-在应用中获取spring定义的bean
因为写了些bean作为quartz的任务用spring配置了,但有些时候需要在别的类中使用这些bean,没有太仔细去研究spring,依稀记得有个getBean,到网上g了一把,发现方法不止一种,选了 ...
- spring初始化在ServletContextListener实现类中获取spring注入对象
查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 由于项目须要,需在ServletContextListener监听接口实现类中调用sprin ...
最新文章
- 配置Centos7 SSH密钥登陆及密码密钥双重验证
- Django与数据库操作
- python123第九周测验答案2020_运用python123平台助力编程课教学
- linux与windows回车换行符的区别
- Xenix — 微软与UNIX的短暂爱恋
- 领域应用 | 推荐算法不够精准?让知识图谱来解决
- 带出7个“师弟”,支付宝BASIC College的辅导员是个伪90后
- 命令式编程面向算法vs声明式编程面向描述
- 基于单片机的水温液位自动控制系统设计
- cad字体安装_拿了CAD字体不知道怎么装?看过来
- 广西南宁机器人比赛_缤纷校园|2018年广西中小学电脑机器人竞赛开赛 南宁学子大显身手...
- Nginx使用stream模块分流实现端口复用
- 微信头像失效_微信头像地址失效踩坑记附带方案
- 敏捷实践之故事墙Story Board
- C#: 星座星盘计算算法
- 2021华数杯C题优秀论文思路分析01
- MediaPlayer播放异常问题
- 从Lync2010看微软UC发展
- 浅析基于GIS平台财政电子沙盘系统
- c语言地址和地址怎么比较大小,C语言精要总结-内存地址对齐与struct大小判断篇...
热门文章
- 群晖Docker映像下载缓慢或失败解决方案
- 如何能让英语水平在一年半载内得到大幅提升?(备注下)
- 关于operator bool () 和bool operator ==()
- 3055. 字符频率
- 一文读懂高速互联的阻抗及反射(中)
- 渣基础:比照Hawstein学Cracking the coding interview(4)
- R语言科学计数法数据改变/丢失/失准,取消科学计数法的原因和解决方法
- 字符编码问题三个不可见的字符(0xEF-0xBB-0xBF,即BOM)
- 学计算机颈椎痛,有效缓解颈椎疼痛的七个简单动作及附图 (电脑族必备)
- 华容道 java swing