在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. VS2010版的Speex音频处理模块(附源码+测试demo)

    开源的Speex代码内部包含了VS2003,05,08工程,但是直接编译总有一些要设置的地方,虽说也不是很复杂,但是对于不是很了解VS的同学来说还是要折腾一阵,所以我弄了一个可以直接使用的版本,当然是 ...

  2. csps模拟测试707172部分题解myc

    题面:https://www.cnblogs.com/Juve/articles/11678524.html 骆驼:构造题,留坑 根据5×5的矩形构造成大矩形 毛一琛: mid in the midd ...

  3. NSLayoutConstraint 开源框架

    https://github.com/cloudkite/Masonry Masonry is a light-weight layout framework which wraps AutoLayo ...

  4. work-shineyoo:杂项1906

    ylbtech-work-shineyoo:杂项1906 1.返回顶部 1. 1.1 SMS (手机的)短信服务.Short Message Service. 1.2 VOD 视频点播.Video o ...

  5. Hibernate关联映射(一对多/多对多)

    版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/843401053.  Hibernate关联映射上接Hibernate持久化类:h ...

  6. VUX的使用方法(以弹出框为例)

    一.安装 cnpm install vux --save cnpm install vux-loader --save-dev 二.配置 const vuxLoader = require('vux- ...

  7. <数据库>MySQL补充( 查询)

    show create table 表名 \G;(查看创建的属性) alter table 表名 auto_increment=xx;(修改自增起始值) set session auto_increm ...

  8. 【核心核心】4.Spring【IOC】注解方式

    1.导入jar包 2.创建对应的类 public interface HelloService { public void sayHello(); } /** * @Component(value=& ...

  9. php 随意参数方法的使用

    1, 用到的PHP函数: func_get_arg() / func_get_args()/ func_num_args 2, func_get_arg(index) :根据索引取得参数具体值     ...

  10. Odoo Documentation : Fields

    Fields Basic fields class openerp.fields.Field(string=None, **kwargs) The field descriptor contains ...