在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. ERROR in xxx.js from UglifyJs

    在打包项目的时候,出现如下的错误: 经过搜索找到原因: 这是因为webpack在打包vue文件时没有成功转换ES6的语法. 解决方案 解决方法很简单,加入babel-preset-es2015插件即可 ...

  2. 菜鸟nginx源码剖析数据结构篇(一)动态数组ngx_array_t[转]

    菜鸟nginx源码剖析数据结构篇(一)动态数组ngx_array_t Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Blog:Blog.csdn ...

  3. Error:Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory

    ylbtech-Error:Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerF ...

  4. webservice技术--服务器端

    1.webservice实现单点登录具体逻辑为 ①软通web端作为客户端,请求wi社区后台,进行登录请求 ②wi社区后台验证t,核实无误后,走登录逻辑,直接进入欢迎页 ③如果有错误,封装错误xml,返 ...

  5. sip会话流程以及sip介绍(1)

    参考连接 :https://www.2cto.com/kf/201609/546336.html https://www.w3cschool.cn/session_initiation_protoco ...

  6. quartz任务调度基础: Job/Trigger/Schedule

    1.Quartz基本用法        参见官方说明:[Quartz Job Scheduler] 三大核心元素: Job:定义要执行的任务 triggers:任务触发策略 scheduler:关联j ...

  7. 08-5-switch

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 解决windows8.1的依赖

  9. 2018-11-26-win10-uwp-获取窗口的坐标和宽度高度

    title author date CreateTime categories win10 uwp 获取窗口的坐标和宽度高度 lindexi 2018-11-26 15:4:0 +0800 2018- ...

  10. 2019-2-18-VisualStudio-给项目添加特殊的-Nuget-的链接

    title author date CreateTime categories VisualStudio 给项目添加特殊的 Nuget 的链接 lindexi 2019-02-18 15:56:48 ...