在Spring应用中创建全局获取ApplicationContext对象

1、需要创建一个类,实现接口ApplicationContextAware的setApplicationContext方法。

2、在创建的这个类中保存一个静态的ApplicationContext对象,然后通过静态的方法返回。

如下,下面是SpringSide的实现,供参考:

/**

* Copyright (c) 2005-2012 springside.org.cn

*

* Licensed under the Apache License, Version 2.0 (the "License");

*/

package org.springside.modules.test.spring;
import org.apache.commons.lang3.Validate;


import org.slf4j.Logger;


import org.slf4j.LoggerFactory;


import org.springframework.beans.factory.DisposableBean;


import org.springframework.context.ApplicationContext;


import org.springframework.context.ApplicationContextAware;

/**
  • 以静态变量保存Spring ApplicationContext, 可在任何代码任何地方任何时候取出ApplicaitonContext.

  • @author calvin


    */


    public class SpringContextHolder implements ApplicationContextAware, DisposableBean {

    private static ApplicationContext applicationContext = null;

    private static Logger logger = LoggerFactory.getLogger(SpringContextHolder.class);

    /**
    • 取得存储在静态变量中的ApplicationContext.


      */


      public static ApplicationContext getApplicationContext() {


      assertContextInjected();


      return applicationContext;


      }

    /**
    • 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.


      */


      public static <T> T getBean(String name) {


      assertContextInjected();


      return (T) applicationContext.getBean(name);


      }
    /**
    • 从静态变量applicationContext中取得Bean, 自动转型为所赋值对象的类型.


      */


      public static <T> T getBean(Class<T> requiredType) {


      assertContextInjected();


      return applicationContext.getBean(requiredType);


      }

    /**
    • 清除SpringContextHolder中的ApplicationContext为Null.


      */


      public static void clearHolder() {


      logger.debug("清除SpringContextHolder中的ApplicationContext:" + applicationContext);


      applicationContext = null;


      }

    /**
    • 实现ApplicationContextAware接口, 注入Context到静态变量中.


      */


      @Override


      public void setApplicationContext(ApplicationContext applicationContext) {


      logger.debug("注入ApplicationContext到SpringContextHolder:{}", applicationContext);

      if (SpringContextHolder.applicationContext != null) {


      logger.warn("SpringContextHolder中的ApplicationContext被覆盖, 原有ApplicationContext为:"


      + SpringContextHolder.applicationContext);


      }

      SpringContextHolder.applicationContext = applicationContext; //NOSONAR


      }

    /**
    • 实现DisposableBean接口, 在Context关闭时清理静态变量.


      */


      @Override


      public void destroy() throws Exception {


      SpringContextHolder.clearHolder();


      }
    /**
    • 检查ApplicationContext不为空.


      */


      private static void assertContextInjected() {


      Validate.validState(applicationContext != null,


      "applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.");


      }


      }

在Spring应用中创建全局获取ApplicationContext对象的更多相关文章

  1. spring mvc中几种获取request对象的方式

    在使用spring进行web开发的时候,优势会用到request对象,用来获取访问ip.请求头信息等 这里收集几种获取request对象的方式 方法一:在controller里面的加参数 public ...

  2. 获取applicationContext对象的方法

    方法一:在初始化时保存ApplicationContext对象 代码: ApplicationContext ac = new FileSystemXmlApplicationContext(&quo ...

  3. spring获取ApplicationContext对象的方法——ApplicationContextAware

    一. 引言 工作之余,在看一下当年学的spring时,感觉我们以前都是通过get~ set~方法去取spring的Ioc取bean,今天就想能不能换种模型呢?因为我们在整合s2sh时,也许有那么一天就 ...

  4. SpringBoot项目中获取applicationContext对象

    ApplicationContext 对象是Spring开源框架的上下文对象实例,也就是我们常说的Spring容器,一般情况下我们是不用手动来管理它,而是由Spring框架自己来维护bean之间的关系 ...

  5. springMVC 使用WebApplicationContext获取ApplicationContext对象

    主要用于从application中获取bean 1.applicationContext 在web.xml中使用listener配置 <context-param> <param-n ...

  6. Java中创建(实例化)对象的五种方式

    Java中创建(实例化)对象的五种方式1.用new语句创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3.运用反 ...

  7. spring 框架通过new Object()获取applicationContext 中的bean方案

    工作中,需要手动创建一个对象,但用到了spring容器中对象的业务逻辑,这时候就要去通过获取容器中的对象.这时候,可以通过实例化一个实现了ApplicationContextAware接口的类获取sp ...

  8. spring中获取ApplicationContext对象的技巧,含源码说明

    第一步,实现接口ApplicationContextAware,重写setApplicationContext方法,下方代码标红的地方,绿色部分 可以通过声明来进行存储到本类中. @Component ...

  9. Spring Boot2 系列教程(十三)Spring Boot 中的全局异常处理

    在 Spring Boot 项目中 ,异常统一处理,可以使用 Spring 中 @ControllerAdvice 来统一处理,也可以自己来定义异常处理方案.Spring Boot 中,对异常的处理有 ...

随机推荐

  1. server端并发聊天

    mul_server和mul_client实现了客户端发什么消息,服务器端回复什么消息 server_dialog和mul_client实现了客户端与服务器并发通信

  2. springboot与热部署

    在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间花费,我们希望不重启应用的情况下,程序可以自动部署(热部署).有以下四种情况,如何能实现热部署. 1.模板引擎: 在Sprin ...

  3. php结合phpStudy实例来熟悉CI框架,用的软件是phpStorm+phpStudy

    1.新建项目名字,我的是放在E盘,叫test,主要是包括application,system,index.php.我的控制器和视图不想放在application中,所以我新建了一个文件夹叫phpTes ...

  4. 关于群晖的sata扩展卡选择

  5. VC控件DateTimePicker使用方法

    出自http://www.cnblogs.com/52yixin/articles/2111299.html 使用DateTimePicker控件一般是获 取其时间替代手工输入带来的不便,而DateT ...

  6. elasticsearch 中文API 记数(八)

    计数API 计数API允许开发者简单的执行一个查询,返回和查询条件相匹配的文档的总数.它可以跨多个索引以及跨多个类型执行. import static org.elasticsearch.index. ...

  7. CodeChef:Chef and Problems(分块)

    CodeChef:Chef and Problems 题目大意 有一个长度为n的序列$a_1,a_2,……,a_n$,每次给出一个区间[l,r],求在区间内两个相等的数的最远距离($max(j-i,满 ...

  8. 跟我一起在ubuntu中安装docker

    卸载旧版本 $ sudo apt-get remove docker docker-engine docker.io 查看ubuntu版本 设置安装源 通过如下步骤,设置安装源仓库,这里我们使用阿里源 ...

  9. 廖雪峰Java10加密与安全-4加密算法-4密钥交换算法

    1DH算法 1.1.原根公式:g^i mod P 条件:1<g<P,0<i<P 原根:介于[1, p-1]之间的任意2个数i,j(p为素数,i≠j)的结果不相等,即 g^i m ...

  10. iframe加载完成事件

    var iframe = document.createElement("iframe"); iframe.src = "http://www.jb51.net" ...