import java.util.Map;import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;/****以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.* @author zhuh*/
public class SpringContextHolder implements ApplicationContextAware{private static ApplicationContext applicationContext;//实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.public void setApplicationContext(ApplicationContext applicationContext) {SpringContextHolder.applicationContext = applicationContext;}//取得存储在静态变量中的ApplicationContext.public static ApplicationContext getApplicationContext() {checkApplicationContext();return applicationContext;}//从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.@SuppressWarnings("unchecked")public static <T> T getBean(String name) {checkApplicationContext();return (T) applicationContext.getBean(name);}//从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.//如果有多个Bean符合Class, 取出第一个.@SuppressWarnings("unchecked")public static <T> T getBean(Class<T> clazz) {checkApplicationContext();@SuppressWarnings("rawtypes")Map beanMaps = applicationContext.getBeansOfType(clazz);if (beanMaps!=null && !beanMaps.isEmpty()) {return (T) beanMaps.values().iterator().next();} else{return null;}}private static void checkApplicationContext() {if (applicationContext == null) {throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");}}}

<!-- 用于持有ApplicationContext,可以使用SpringContextHolder.getBean('xxxx')的静态方法得到spring bean对象 -->

<bean class="com.xxxxx.SpringContextHolder"  />

该工具类主要用于:那些没有归入spring框架管理的类却要调用spring容器中的bean提供的工具类。

在spring中要通过IOC依赖注入来取得对应的对象,但是该类通过实现ApplicationContextAware接口,以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候中取出ApplicaitonContext.

如此就不能说说org.springframework.context.ApplicationContextAware这个接口了:

当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象。

除了以上SpringContextHolder类之外,还有不需要多次加载spring配置文件就可以取得bean的类:

1.Struts2框架中,在监听器中有这么一句ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());之后可以用scheduleService = (IScheduleService)context.getBean("scheduleService");取到对象,请问context都可以取到什么信息,这些信息的来源在哪?是XML里配置了呢,还是固定的一部分信息呢?
2、这个 application封装的是web.xml 内部的信息而你的web.xml里面有spring的配置文件,所有,里面还包含spring的信息同样包含struts2的filter信息总之就是和web.xml有关系的所有信息

3、在web.xml里有这么一段    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>/WEB-INF/applicationContext*.xml</param-value>    </context-param>

那么在取信息的时候,也会把applicationContext.xml里的信息取出来


转载于:https://www.cnblogs.com/wcyBlog/p/4657885.html

SpringContextHolder 静态持有SpringContext的引用相关推荐

  1. iOS架构-静态库.framework(引用第三方SDK、开源库、资源包)(9)

    前面介绍了 静态库.a依赖第三方静态库.a的制作 静态库.framework之依赖第三方库(Cocoapods进行管理) 今天课题: 静态库.framework(引用第三方SDK.framework. ...

  2. linux调用qt生成静态库文件下载,Centos7下编译openssl静态库与QT引用

    1.下载openssl版本:https://www.openssl.org/source/old/ 下载地址 2.我们下载版本为:openssl-1.0.2k 3.拷贝到Linux服务器任意目录 4. ...

  3. 符号引用,动态链接,静态链接,直接引用的区别

    在类加载的时候会有5部分:加载,验证,准备,解析,初始化 静态链接 在解析的时候将符号引用变为直接引用,该阶段会把一些静态方法比如mian方法 替换为指向数据所存内存的指针或者句柄等(直接引用) 动态 ...

  4. java 引用被回收_java GC 静态List 如果没有引用会被回收吗

    垃圾收算法 1.引用计数法(Reference Counting Collector) 2.tracing算法(Tracing Collector) 3.compacting算法(Compacting ...

  5. ios 重复引用 静态库_iOS项目引用静态库文件.a

    由于开发的项目中使用了静态库文件(.a文件),因此专门对它进行了简单的学习.静态库文件包装的是经常使用的公共代码,便于代码的复用. 1.生成静态库文件(static library file).主要包 ...

  6. Visual studio那些破事。。。(生成静态库、生成动态库、引用静态库、引用动态库)

    共4个小步骤,每个小步骤你都可以新建个VS解决方案,自己跟着步骤跑一下,windows怎么[生成静态库.生成动态库.引用静态库.引用动态库]你就基本明白了@! 文章目录 1.导出静态库.lib(add ...

  7. java编程中的持有对方引用是什么意思?有什么作用?

    持有对方引用比如 A类有: h.j. k, 3种方法,B类有 h 1种方法,但我B类必须要用到 A 类的 k方法怎么办呢?那么下面就要引入引用了!我在 B 类中创建个A类的引用,例如 如果在同一包下就 ...

  8. Linux下静态库与动态库的引用关系深入分析

    很久就想写一篇关于动态库和静态库互相引用的一篇文章,但是总感觉准备不充分,而一直没有勇气下笔,最近在和同事的讨论中,似乎有了一些新的认识,想把这些记录下来,和大家进行一次分享,同时也是做一次记录. 这 ...

  9. java中的holder类,SpringContextHolder工具类

    1.工具类用途? 该工具类主要用于那些没有归入spring框架管理的类却要调用spring容器中的bean提供的工具类,在spring中要通过IOC依赖注入来取得对应的对象,但是该类通过实现Appli ...

最新文章

  1. 被解放的姜戈08 远走高飞
  2. 你的 CRF 层的学习率可能不够大
  3. 【eclipse转idea的第一天】配置idea
  4. mac下安装mysql-pyhon_mac下安装MySQL-python模块
  5. 'tensorflow' has no attribute 'sub'
  6. 算法基础部分2-分治
  7. 称重传感器并联后的误差及附加误差
  8. [转] TextField的restrict属性妙用
  9. JQuery easyui (1) Draggable(拖动)组件
  10. ibm x5服务器系统重装,IBM 3850 X5 Server安装Windows 2003步骤说明
  11. aspose转pdf乱码问题
  12. 于飞seo:dedecms织梦文件目录说明讲解大全
  13. python获取已打开的网页内容_用Python获取网页数据
  14. iOS(swift): Core ML的使用
  15. 蓝桥杯题解 鲁卡斯队列 Java答案
  16. 怎么学习英文--英国人教你如何学习英文
  17. 有哪些有意思的,很 cool 的开源 C++ 项目 ?
  18. Jeesite Login 登录 分析
  19. 用 Taichi 加速 Python:提速 100+ 倍!
  20. 2018夏天的俄罗斯之旅

热门文章

  1. 31全志r58平台Android4.4.2下打开USB摄像头
  2. [洛谷2月月月赛]富金森林公园
  3. js/jq判断鼠标滚轮方向
  4. java 线程---成员变量与局部变量
  5. 鼠标移出DIV层时,触发onMouseOut事件
  6. 常州大学阿里云大数据学院举行“创新思维”课程答辩
  7. 使用 MYSQLBINLOG 来恢复数据
  8. Spring 学习总结 使用静态工厂创建Bean
  9. Rxjava与Retrofit的使用
  10. 第一天课程:第一个python程序print say hello