配置springmvc在其他类中(spring容器外)获取注入bean
2016-02-23 20:50
841 查看
学习https://github.com/thinkgem/jeesite
今天在写JedisUtils的时候要注入JedisPool,而这个属性被设置为static,@Resource和@Autowired都不可以注入,因为spring不能为静态变量依赖注入。因此需要额外的方法获取spring管理的bean。本文即SpringContextHolder:
今天在写JedisUtils的时候要注入JedisPool,而这个属性被设置为static,@Resource和@Autowired都不可以注入,因为spring不能为静态变量依赖注入。因此需要额外的方法获取spring管理的bean。本文即SpringContextHolder:
package com.demo.common.utils; import org.apache.commons.lang3.Validate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; /** * 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext. * Created by Administrator on 2016/2/23. */ @Service @Lazy(false) public class SpringContextHolder implements ApplicationContextAware ,DisposableBean { private static ApplicationContext applicationContext = null; private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class); /** * 去的存储在静态变量中的ApplicationContext * @return */ public static ApplicationContext getApplicationContext(){ assertContextInjected(); return applicationContext; } /** * 从静态变量applicationContext中去的Bean,自动转型为所复制对象的类型 * @param name * @param <T> * @return */ public static <T> T getBean(String name){ assertContextInjected(); return (T)applicationContext.getBean(name); } /** * 从静态变量applicationContext中去的Bean,自动转型为所复制对象的类型 * @param requiredType * @param <T> * @return */ public static <T> T getBean(Class<T> requiredType){ assertContextInjected(); return (T)applicationContext.getBean(requiredType); } /** * 清楚SpringContextHolder中的ApplicationContext为Null */ public static void clearHolder(){ if(logger.isDebugEnabled()){ logger.debug("清楚SpringContextHolder中的ApplicationContext:"+applicationContext); } applicationContext = null; } /** * 检查ApplicationContext不为空 */ private static void assertContextInjected() { Validate.validState(applicationContext!=null,"applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder."); } /** * 实现ApplicationContextAware接口,注入Context到静态变量 * @param applicationContext * @throws BeansException */ @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextHolder.applicationContext = applicationContext; } /** * 实现DisposableBean接口,在Context关闭时清理静态变量 * @throws Exception */ @Override public void destroy() throws Exception { SpringContextHolder.clearHolder(); } }
相关文章推荐
- 利用内存分析工具(Memory Analyzer Tool,MAT)分析java项目内存泄露
- java中条件(&& ||) 逻辑(& | !^)和按位(& | ^ ~)的区别
- 浅谈Struts2拦截器的原理与实现
- struts2中action接收参数的方法
- Struts2校验器(二)之注解
- java中只有值传递没有引用传递
- Struts2校验器(一)之规格文件
- eclipse ctrl+左键进入xml文件
- Java基础之并发编程(二)
- 226. Invert Binary Tree
- 104. Maximum Depth of Binary Tree
- Java中的集合(一)——集合接口
- Netbeans 中的编译器相关配置
- 258. Add Digits
- 枚举类型模拟
- Spring中的@response和@request注解
- Struts2 <s:token>防止表单重复提交 %{}
- JSP+JavaBean+Servlet技术(MVC模型)
- SpringMVC 406 accept请求错误,没有加入将json序列化的包
- Eclipse 搭建Spring Struts2