当前位置: 首页 > 编程日记 > 正文

配置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,如需转载请自行联系原作者


相关文章:

声智科技完成2亿元B轮融资,将持续拓展语音交互产品的规模化落地

整理 | 一一出品 | AI科技大本营寒冬之下&#xff0c;不少创业公司依然得到了资本青睐。AI科技大本营消息&#xff0c;12 月 29 日消息&#xff0c;声智科技&#xff08;SoundAI&#xff09;已于近期完成 2 亿人民币 B 轮融资&#xff0c;本轮投资由毅达资本领投&#xff0c;峰…

360度看IT行业--3月12日西安工程大学讲座

2009年3月12日&#xff0c;一个绿色的好日子。当天晚上7点30分&#xff0c;在西安工程大学的讲座开始了。西安工程大学的孩子们很热情&#xff0c;大一大二的居多&#xff0c;虽然是非计算机专业&#xff0c;但提前就满满的坐在会场等待了。而且很关注IT行业&#xff0c;提了很…

专访中国移动钱岭:大数据更像是一种“倍增器”

记者 | 杨丽出品 | AI科技大本营&#xff08;rgznai100)为把握时代特征&#xff0c;2016 年中国移动确定并大力推动“大连接”战略&#xff0c;并制定了“十三五”时期做大连接规模、做优连接服务、做强连接应用的三个目标。如今&#xff0c;这家企业已经拥有 9.16 亿移动端用户…

创业者应该如何看待金钱

什么是真正的赢&#xff1f;一个高智商、高情商的商人&#xff0c;经营企业追求的终极目标就是一个赢字&#xff1a;金钱、地位、豪宅、名车、美女、权利、荣耀&#xff0c;为了赢得这些&#xff0c;很多人曾不择手段&#xff0c;曾不断地苦苦寻找“如何以最小的投入快速获得最…

Exchange与ADFS单点登录 PART 2:部署和配置ADFS

在第一篇文章完了之后&#xff0c;我们就可以在我们的服务器上部署ADFS了&#xff0c;安装的方法很简单&#xff0c;直接在服务器管理器中添加功能角色即可&#xff0c;选择当前服务器并在服务器角色中选择ADFS。 完成之后我们需要对ADFS进行详细的配置&#xff0c;在服务器管理…

路由器和交换机的综合实验

路由器和交换机的综合实验<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />主要目标&#xff1a;1. 跨交换机&#xff08;二层交换机&#xff09;的相同VLAN 之间的通讯2. 不同VLAN之间的通讯1&#xff09; 通过路由器实现不同VL…

如何写出符合Python审美的代码风格?

作者 | Rocky0429来源 | Python空间本文为 AI科技大本营投稿文章&#xff08;欢迎给我们投稿&#xff0c;投稿请联系微信1092722531&#xff09;写在之前每个人都有自己的代码风格&#xff0c;随着写的行数增加&#xff0c;自己对于代码的审美也会变的不一样&#xff0c;这就像…

程序员都该懂点 HTTP

作者&#xff1a;developerHaozGithub 地址&#xff1a;developerHaoz说明&#xff1a;本文主要是对 HTTP 基础知识进行总结和归纳&#xff0c;毕竟做 IT 的&#xff0c;网络这一块还是很重要的 本文的主要内容HTTP 是什么URL 详解HTTP 之请求篇HTTP 之响应篇一、HTTP是什么1、…

谁的青春不迷茫,其实我们都一样

如果你为人生画一条浅浅吃苦底线&#xff0c;就别妄想跨越深邃的幸福极限。在熠熠生辉前&#xff0c;总要捱过一段孤独不安的日子。唯有担得起厚重的经历&#xff0c;才能禁得起岁月推敲。记住&#xff1a;一定要努力&#xff0c;但别着急。加油&#xff01; 很庆幸你能以这样好…

关于Iframe在IE6下不显示的bug

IE都出到IE8了,用IE6的人渐渐少了..但还是存在的.例如QAMM们在用. 所以,IE6下存在的问题也必须解决.这两天,我就遇到一个了: html<table> <tr> <td id"tdTest" runat"server"> <iframe id"ifrTest" h…

腾讯优图吴永坚:迈向深度学习,我们面临模型训练与推荐的双重考验

整理 | 琥珀出品 | AI 科技大本营对腾讯优图的发展历程&#xff0c;吴永坚表示&#xff0c;优图是非常幸运的&#xff0c;幸运的同时也知道优图选对了方向&#xff0c;只要坚持&#xff0c;还是会有收获的。12 月 15 日&#xff0c;以"新趋势、新技术、新应用"为主题…

JS子窗口调用父窗口中的函数

很简单只需要一句话就可以了&#xff1a; window.opener.changeColor(); 这里的changeColor()就是父窗口中JS的一个函数 本文转自sucre03 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/sucre/377011&#xff0c;如需转载请自行联系原作者

父亲节遇上端午节,你难道不回家吗?

创业者是孤独的 他们选择了更加艰险的人生。 同时&#xff0c;他们又是幸运的 因为他们背后有一位伟大的父亲。 决定创业时 他说&#xff1a;“大胆去闯吧&#xff0c;有爸爸在” 创业失败时 他说&#xff1a;“累了就回家&#xff0c;有爸爸在” 简单朴实的话语包含的是无私广…

蜘蛛爬虫网络高像素图片抓取工具[搜索引擎]

ZSpider—— 是一款Photo crawler工具。主要功能&#xff1a;免费抓取网络高像素图片&#xff0c;并下载到本地。使用说明&#xff1a;1. 软件环境&#xff1a;Windows XP, 20003, Vista, 2008, Windows 7.NET Framework 3.52. 双击Spider.exe&#xff0c;选择菜单&#xff0c;…

技术流 | 手把手教你用Python设计一个命令行界面

作者 | Yannick Wolff 译者 | 刘旭坤 整理 | Jane出品 | Python大本营对 Python 程序来说&#xff0c;完备的命令行界面可以提升团队的工作效率&#xff0c;减少调用时可能碰到的困扰。今天&#xff0c;我们就来教大家如何设计功能完整的 Python 命令行界面。对 …

送给那些还在迷茫的人

在现在这个高节奏的高效率的时代&#xff0c;两级分化特别厉害。有钱的会越来越有钱&#xff0c;没钱的要么安于现状&#xff0c;要么就越来越穷。  这种思维的产生根源就是不懂得把握机会&#xff0c;其实机会这个东西很奇妙&#xff0c;有时候我们自己也能发现有个机会就摆…

cisco路由器与QOS技术

1 前言随着因特网的普及&#xff0c;网络和人们生活的关系愈加密切&#xff0c;多样化的业务&#xff08;数据、语音、视频等&#xff09;应运而生。通常&#xff0c;这些业务对于通信条件的要求各不相同&#xff1a;数据业务对传递的可靠性要求非常高&#xff0c;误码率是最重…

shell介绍,命令历史,命令补全和别名 ,通配符, 输入输出重定向

2019独角兽企业重金招聘Python工程师标准>>> shell介绍 shell是一个命令解释器&#xff0c;提供用户和机器之间的交互&#xff1b; 支持特定语法&#xff0c;比如逻辑判断、循环&#xff1b; 每个用户都可以有自己特定的shell&#xff1b; CentOS7默认shell为bash (…

2018年Python开源项目Top100!只在这里!

整理 | Jane出品 | Python大本营2018 年的最后一天&#xff0c;营长为大家新鲜出炉了一份 2018 年 Python 开源项目 Top100 清单&#xff01;这些项目都是营长每月通过收集 Mybridge 的数据整理而来的&#xff0c;是不是很棒&#xff01;&#xff08;我要在留言区看到你们夸我~…

亲君圆梦,创业一起来

你想像中的创业&#xff0c;是不是办公地点找好了吗&#xff1f;需要注册公司一步一步来呢做哪个行业好呢有没有什么赚钱的项目呢没有你想的那么困难只需要一部手机发个链接点一下 玩一年 创业不花一分钱 校园创业 只需动动手指想要带你一起赚钱一起飞吗&#xff1f;我在厦门亲…

半途而废的香山之旅

今天终于下定决心去香山了&#xff01;大清早&#xff0c;就和同学小燕两个人买好了路上吃的东西。顶着北京早晨凉爽但有点阻的风骑车自行车向香山的方向进发了!这是我第一次去香山&#xff0c;路线也只能是摸索了&#xff01;我本来是准备从北四环西路一直往西骑&#xff0c;然…

POwershell 更改文件权限

今天需要给某个网络共享的大文件重新配置一个权限。这个文件夹下面有很多乱七八糟的小文件&#xff0c;很多创建人甚至已经离开公司了。如果一个个地目录手动修改所有者权限&#xff0c;再打开继承关系&#xff0c;这样比较麻烦&#xff0c;这个时候自然是用脚本比较方便了。 1…

“清华帮”AI造富

作者 | 马程&#xff1b;编辑 | 罗丽娟来源 | 全天候科技【导语】如今的AI创业者中&#xff0c;有一大批人出自精英汇聚的 “姚班”和清华的各个院系。他们们凭借技术傍身迅速打造出一批AI独角兽&#xff0c;但在发展过程中&#xff0c;他们又不得不面对资本的压力&#xff0c;…

什么时候是创业最佳时机?7个最佳的励志创业时机GET了吗

1、年轻时人们常说“出名要趁早”&#xff0c;创业也是同样的道理&#xff0c;创业越早&#xff0c;成功的几率就越大。年轻是一种巨大的财富&#xff0c;是无知和天真的完美结合&#xff0c;吸取经验可以作为愚蠢决定的借口。有人说&#xff0c;和职业篮球运动员一样&#xff…

连接ORACLE实例

public class OracleConn {public static Connection getConn() {Connection conn null;try {Class.forName("oracle:jdbc.driver.OracleDriver");String url "jdbc:oracle:thin:localhost:1521:数据库SID";String user "数据库用户名";String…

用Inno Setup来解决.NetFramework安装问题

前段时间朋友接了一个项目&#xff0c;具体是开发一个安装在局域网内的软件&#xff0c;这个软件会定时连接局域网内的服务器来更新本地客户端的一些信息&#xff0c;因为在局域网内存在着多种不同的Windows版本&#xff0c;从WindowsXP、Windows2003及Windows2008到Windows7等…

我想,有间花房

你带我走进你的花房&#xff0c;我无法逃脱花的清香&#xff0c;我不知不觉忘记了方向&#xff0c;你说我世上最坚强&#xff0c;我说你世上最善良&#xff0c;你不知不觉和花儿一样也许每一位 爱花的姑娘&#xff0c;都想有一间属于自己 的花 房 &#xff0c;在悠闲的午后&…

JS重写提示框(confirm)

<script language"javascript"> /** * 功能&#xff1a;显示提示窗口 * 作者&#xff1a;申楠 qq&#xff1a;38371354 email&#xff1a;amushen1yahoo.com.cn http;//amushen.cnblogs.com * 日期&#xff1a;2005-10-26 * 版本&#xff1a;1.1 * 备注&#…

实现通用人工智能还要多久?Hinton与AlphaGo之父这样回答

作者 | Klye Wiggers 译者 | 刘旭坤 责编 | 琥珀 出品 | AI科技大本营&#xff08;公众号ID&#xff1a;rgznai100&#xff09; 人工智能&#xff08;AI&#xff09;在即将过去的 2018 年进展神速&#xff0c;取得了很多令人瞩目的成就&#xff0c;比如预测用户感兴趣的音乐…

SQL Server 2008备份大全实战(七)

这一篇博文探讨下SQL Server 2008 备份的实际操作&#xff0c;事实上SQL Server 2008并不关心数据是备份到物理磁盘上还是磁带上&#xff0c;在SQL Server 2008数据库备份中&#xff0c;预定义的目标位置叫做设备。这里设备是对硬盘&#xff0c;磁带机等备份存储的通称。通俗些…