今天在写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相关推荐

  1. 解决无法注入spring容器,获取不到spring容器中的bean问题

    解决无法注入spring容器,获取不到spring容器中的bean问题 前两天工作中遇到一个问题,收到的需求是根据logbak日志实现通过过滤错误日志发送预警邮件到邮箱,logback自定义实现类如下 ...

  2. springBoot将Service实现类交给spring容器管理的两种方法

    方法一: 在类名上面添加@Service注解 方法二: 添加配置文件,配置文件里添加添加方法如下的方法,并加@Bean注解 springBoot将(Service实现)类交给spring容器管理的目的 ...

  3. java getbean方法_java相关:spring中通过ApplicationContext getBean获取注入对象的方法实例...

    java相关:spring中通过ApplicationContext getBean获取注入对象的方法实例 发布于 2020-12-19| 复制链接 分享一篇关于关于spring中通过Applicat ...

  4. springMVC通过spring.xml对属性注入bean值(工厂模式)

    springMVC通过spring.xml对属性注入bean值,该bean是一个map容器: <bean id="configXMLCreatorFactory" class ...

  5. FastJson序列化Json自定义返回字段,普通类从spring容器中获取bean

    前言: 数据库的字段比如:price:1 ,返回需要price:1元. 这时两种途径修改: ① 比如sql中修改或者是在实体类转json前遍历修改. ②返回json,序列化时候修改.用到的是fastj ...

  6. java类加入到spring容器_普通java类加入spring容器的四种方式

    今天在自己开发的工具类中使用了spring注入的方式调用了其他类,但是发生的报错,在整理了后今天小结一下. 首先简单介绍下spring容器,spring容器是整个spring框架的核心,通常我们说的s ...

  7. 【spring容器启动】之bean的实例化和初始化(文末附:spring循环依赖原理)

    本次我们通过源码介绍ApplicationContext容器初始化流程,主要介绍容器内bean的实例化和初始化过程.ApplicationContext是Spring推出的先进Ioc容器,它继承了旧版 ...

  8. php返回类中方法,php如何获取类中所有的方法名

    php获取类中所有的方法名的方法:可以利用[get_class_methods()]函数来获取,[get_class_methods()]函数可以返回指定类中所有的方法名,并且会将方法名保存到数组中. ...

  9. Spring在Java Filter注入Bean为Null的问题解决

    From: https://www.cnblogs.com/EasonJim/p/7666009.html 在Spring的自动注入中普通的POJO类都可以使用@Autowired进行自动注入,但是除 ...

最新文章

  1. 20170307-1
  2. Mssql 之 定期备份数据库
  3. centos6 安装 mantisbt-1.2.8 —— (3)Linux系统下yum源配置(Centos 6)
  4. 【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( MAT 工具使用 | 最大对象 | 类实例个数 | 引用与被引用 | GC Roots 最短链 )
  5. C#控制台程序生成文件分析
  6. 关于 PDCA 的个人理解
  7. xp系统打印机服务器报错,WinXP系统打印机显示Spoolsv.exe 应用程序错误的解决方法...
  8. 如何使用markdown创建个人网站
  9. Dubbo 线上 Thread pool is EXHAUSTED 问题跟踪
  10. java graphics 渐变色_使用BufferedImage进行渐变色操作
  11. 2012年中国最佳医院排行榜
  12. Mac 此账户尚未用于app store_App Store调整频繁!游戏App下架数量再次增加! | 8月推广报告...
  13. MOS管GS两端并联阻容的作用分析
  14. JVM的Metaspace,JAVA8以前是Permanent Area
  15. SonarQube安装及使用
  16. 使用ADB工具卸载/停用Android系统应用(无需Root)
  17. Programming Differential Privacy第三章
  18. 编码与DNA存储——DNA码的构造
  19. 《惯性导航》第二版秦永元 知识点总结之一 《第一章 绪论》
  20. 彻底理解单例设计模式

热门文章

  1. linux哪个版本支持多线程,关于Linux操作系统的叙述错误的是()A、Linux是多用户、多任务、支持多线程的操作系统B、Linux的源...
  2. oracle bl编译,使用 PL/SQL 条件编译
  3. hash hashcode变化_hashmap重写key的hashcode问题
  4. 怎么锁定电脑屏幕_和平精英怎么在电脑上玩?匹配手机最简单的方式玩你值得拥有...
  5. 《深入理解Java虚拟机》(第二版)学习1:JVM的内存划分
  6. Java学习总结:50(扫描流:Scanner)
  7. CSS之布局(盒子模型--外边距)
  8. 第一天写,希望能坚持下去。
  9. Invalid Host header 问题解决
  10. 【微信小程序之画布】三:手指触摸绘画椭圆