配置springmvc在其他类中(spring容器外)获取注入bean
时间:2022-05-04
本文章向大家介绍配置springmvc在其他类中(spring容器外)获取注入bean,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
学习https://github.com/thinkgem/jeesite
今天在写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 }
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释