配置springmvc在其他类中(spring容器外)获取注入bean
今天在写JedisUtils的时候要注入JedisPool,而这个属性被设置为static,@Resource和@Autowired都不可以注入,因为spring不能为静态变量依赖注入。因此需要额外的方法获取spring管理的bean。本文即SpringContextHolder:
1 package com.demo.common.utils; 2 3 import org.apache.commons.lang3.Validate; 4 import org.slf4j.Logger; 5 import org.slf4j.LoggerFactory; 6 import org.springframework.beans.BeansException; 7 import org.springframework.beans.factory.DisposableBean; 8 import org.springframework.context.ApplicationContext; 9 import org.springframework.context.ApplicationContextAware; 10 import org.springframework.context.annotation.Lazy; 11 import org.springframework.stereotype.Service; 12 13 /** 14 * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext. 15 * Created by Administrator on 2016/2/23. 16 */ 17 @Service 18 @Lazy(false) 19 public class SpringContextHolder implements ApplicationContextAware ,DisposableBean { 20 private static ApplicationContext applicationContext = null; 21 private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class); 22 23 /** 24 * 去的存储在静态变量中的ApplicationContext 25 * @return 26 */ 27 public static ApplicationContext getApplicationContext(){ 28 assertContextInjected(); 29 return applicationContext; 30 } 31 32 /** 33 * 从静态变量applicationContext中去的Bean,自动转型为所复制对象的类型 34 * @param name 35 * @param <T> 36 * @return 37 */ 38 public static <T> T getBean(String name){ 39 assertContextInjected(); 40 return (T)applicationContext.getBean(name); 41 } 42 43 /** 44 * 从静态变量applicationContext中去的Bean,自动转型为所复制对象的类型 45 * @param requiredType 46 * @param <T> 47 * @return 48 */ 49 public static <T> T getBean(Class<T> requiredType){ 50 assertContextInjected(); 51 return (T)applicationContext.getBean(requiredType); 52 } 53 54 /** 55 * 清楚SpringContextHolder中的ApplicationContext为Null 56 */ 57 public static void clearHolder(){ 58 if(logger.isDebugEnabled()){ 59 logger.debug("清楚SpringContextHolder中的ApplicationContext:"+applicationContext); 60 } 61 applicationContext = null; 62 } 63 64 65 /** 66 * 检查ApplicationContext不为空 67 */ 68 private static void assertContextInjected() { 69 Validate.validState(applicationContext!=null,"applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder."); 70 } 71 72 /** 73 * 实现ApplicationContextAware接口,注入Context到静态变量 74 * @param applicationContext 75 * @throws BeansException 76 */ 77 @Override 78 public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { 79 SpringContextHolder.applicationContext = applicationContext; 80 } 81 82 /** 83 * 实现DisposableBean接口,在Context关闭时清理静态变量 84 * @throws Exception 85 */ 86 @Override 87 public void destroy() throws Exception { 88 SpringContextHolder.clearHolder(); 89 } 90 }
本文转自Ryan.Miao博客园博客,原文链接:http://www.cnblogs.com/woshimrf/p/5211191.html,如需转载请自行联系原作者
配置springmvc在其他类中(spring容器外)获取注入bean相关推荐
- 解决无法注入spring容器,获取不到spring容器中的bean问题
解决无法注入spring容器,获取不到spring容器中的bean问题 前两天工作中遇到一个问题,收到的需求是根据logbak日志实现通过过滤错误日志发送预警邮件到邮箱,logback自定义实现类如下 ...
- springBoot将Service实现类交给spring容器管理的两种方法
方法一: 在类名上面添加@Service注解 方法二: 添加配置文件,配置文件里添加添加方法如下的方法,并加@Bean注解 springBoot将(Service实现)类交给spring容器管理的目的 ...
- java getbean方法_java相关:spring中通过ApplicationContext getBean获取注入对象的方法实例...
java相关:spring中通过ApplicationContext getBean获取注入对象的方法实例 发布于 2020-12-19| 复制链接 分享一篇关于关于spring中通过Applicat ...
- springMVC通过spring.xml对属性注入bean值(工厂模式)
springMVC通过spring.xml对属性注入bean值,该bean是一个map容器: <bean id="configXMLCreatorFactory" class ...
- FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean
前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...
- java类加入到spring容器_普通java类加入spring容器的四种方式
今天在自己开发的工具类中使用了spring注入的方式调用了其他类,但是发生的报错,在整理了后今天小结一下. 首先简单介绍下spring容器,spring容器是整个spring框架的核心,通常我们说的s ...
- 【spring容器启动】之bean的实例化和初始化(文末附:spring循环依赖原理)
本次我们通过源码介绍ApplicationContext容器初始化流程,主要介绍容器内bean的实例化和初始化过程.ApplicationContext是Spring推出的先进Ioc容器,它继承了旧版 ...
- php返回类中方法,php如何获取类中所有的方法名
php获取类中所有的方法名的方法:可以利用[get_class_methods()]函数来获取,[get_class_methods()]函数可以返回指定类中所有的方法名,并且会将方法名保存到数组中. ...
- Spring在Java Filter注入Bean为Null的问题解决
From: https://www.cnblogs.com/EasonJim/p/7666009.html 在Spring的自动注入中普通的POJO类都可以使用@Autowired进行自动注入,但是除 ...
最新文章
- 20170307-1
- Mssql 之 定期备份数据库
- centos6 安装 mantisbt-1.2.8 —— (3)Linux系统下yum源配置(Centos 6)
- 【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( MAT 工具使用 | 最大对象 | 类实例个数 | 引用与被引用 | GC Roots 最短链 )
- C#控制台程序生成文件分析
- 关于 PDCA 的个人理解
- xp系统打印机服务器报错,WinXP系统打印机显示Spoolsv.exe 应用程序错误的解决方法...
- 如何使用markdown创建个人网站
- Dubbo 线上 Thread pool is EXHAUSTED 问题跟踪
- java graphics 渐变色_使用BufferedImage进行渐变色操作
- 2012年中国最佳医院排行榜
- Mac 此账户尚未用于app store_App Store调整频繁!游戏App下架数量再次增加! | 8月推广报告...
- MOS管GS两端并联阻容的作用分析
- JVM的Metaspace,JAVA8以前是Permanent Area
- SonarQube安装及使用
- 使用ADB工具卸载/停用Android系统应用(无需Root)
- Programming Differential Privacy第三章
- 编码与DNA存储——DNA码的构造
- 《惯性导航》第二版秦永元 知识点总结之一 《第一章 绪论》
- 彻底理解单例设计模式
热门文章
- linux哪个版本支持多线程,关于Linux操作系统的叙述错误的是()A、Linux是多用户、多任务、支持多线程的操作系统B、Linux的源...
- oracle bl编译,使用 PL/SQL 条件编译
- hash hashcode变化_hashmap重写key的hashcode问题
- 怎么锁定电脑屏幕_和平精英怎么在电脑上玩?匹配手机最简单的方式玩你值得拥有...
- 《深入理解Java虚拟机》(第二版)学习1:JVM的内存划分
- Java学习总结:50(扫描流:Scanner)
- CSS之布局(盒子模型--外边距)
- 第一天写,希望能坚持下去。
- Invalid Host header 问题解决
- 【微信小程序之画布】三:手指触摸绘画椭圆