`
lk557
  • 浏览: 142386 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

 
阅读更多

在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 Context上下文创建自定义对象

    3. **获取Bean**:在我们的应用程序中,我们可以使用`ApplicationContext`来获取之前定义的bean实例。例如: ```java ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml...

    Spring Cloud Gateway的全局异常处理

    然而,在实际应用过程中,开发者会发现Spring Cloud Gateway默认的异常处理机制并不完善,尤其是对于RESTful API而言,默认情况下返回的是HTML格式的错误页面,这显然不符合前后端分离的应用场景。因此,本文将详细...

    在Eclipse 中创建Spring的 Web应用.doc

    在Eclipse中创建一个基于Spring的Web应用涉及多个步骤,主要涵盖了Spring框架的Web模块、ApplicationContext的使用以及在Web容器中的配置。以下是详细的过程和相关知识点: 1. **Spring Web模块**: Spring框架...

    Java中Spring获取bean方法小结

    这里我们将详细探讨如何在Java中通过Spring获取配置的bean。 1. **BeanFactory与ApplicationContext** - **BeanFactory** 是Spring中最基础的IoC容器,负责管理和实例化Bean。它允许开发者定义Bean的生命周期和...

    Spring与Web环境集成1

    这样,我们可以通过`WebApplicationContextUtils`工具类的静态方法`getWebApplicationContext(ServletContext)`在Web应用的任何地方获取ApplicationContext对象,无需每次都手动创建。 3. **导入Spring集成Web的...

    09 Spring IoC容器ApplicationContext如何实现国际化慕课专栏1

    Spring的ResourceBundleMessageSource类将ResourceBundle与Spring的IoC容器集成,使得我们可以方便地从ApplicationContext中获取不同语言的字符串。配置ResourceBundleMessageSource可以通过XML或注解两种方式。XML...

    springmvc spring 两套上下文问题

    在Spring MVC和Spring框架的整合应用中,常常会遇到两套上下文的问题。Spring MVC是Spring框架的一个模块,主要用于处理Web请求,而Spring则提供了一个更广泛的IoC(Inversion of Control,控制反转)和AOP(Aspect ...

    如何在spring中等价配置得到原本由jndi配置实现的数据源

    通过以上步骤,你就可以在Spring环境中创建一个等价于JNDI配置的数据源了。这种方式不仅适用于非Web环境,也适合那些希望在Web环境中避免使用JNDI的场景。记住,选择合适的数据源和配置策略对于应用性能和稳定性至关...

    spring课程

    4. session:在Web应用中,每个HTTP session中创建一个bean。 5. global-session:在portlet应用中,全局session作用域。 了解并掌握这些基础知识点,可以帮助开发者更好地理解和使用Spring框架,从而构建高效、可...

    spring最新的中文API

    2. **依赖注入(DI)**:DI是Spring的重要特性,它允许对象之间的依赖关系通过配置来决定,而不是硬编码在类中。这使得代码更易于测试和维护。 3. **AOP**:Spring的AOP支持允许开发者定义“切面”,即跨越多个对象...

    Spring+SpringMVC+Mybatis框架整合例子(SSM) 下载

    2. 配置Spring:创建Spring的配置文件,如applicationContext.xml,配置Bean、DataSource、TransactionManager等。 3. 配置SpringMVC:创建SpringMVC的配置文件,如servlet-context.xml,配置DispatcherServlet、...

    Spring5中文文档

    资源管理章节涵盖了资源的获取和抽象,包括Resource接口的介绍、内置的Resource实现、资源加载器以及如何在应用上下文中使用资源路径。 验证、数据绑定和类型转换部分讲解了如何使用Spring的验证器接口进行验证,...

    spring管理bean应用实例代码

    在Spring框架中,Bean管理是核心功能之一,它允许开发者通过声明式的方式配置和管理对象。这个压缩包文件“spring管理bean应用实例代码”显然包含了关于如何在Spring中配置和使用Bean的示例代码。接下来,我们将深入...

    spring配置中<context-param> 和<init-param>的 区别

    3. **访问方式**:`&lt;context-param&gt;`可通过Spring容器直接访问,`&lt;init-param&gt;`则是在Servlet的`init`方法中通过`ServletConfig`对象获取。 了解这些差异后,开发者可以根据具体需求选择合适的配置方式,以实现更...

    Spring 5 Design Patterns

    在Spring框架中,BeanFactory和ApplicationContext就是工厂模式的实现。它们负责创建和管理应用程序中的对象,允许开发者通过配置文件或注解来定义对象的创建逻辑。 2. **单例模式**: 单例模式确保一个类只有一个...

    Spring学习资料

    而ContextLoaderListener则是一个监听器,可以在Web应用启动时加载配置文件,创建ApplicationContext,并将上下文信息存储在ServletContext中,方便全局访问。 在Web应用的部署描述符web.xml中,我们可以通过`...

    Spring系列面试题129道(附答案解析)

    在Spring AOP中,代理是一种创建代理对象的技术,用于拦截方法调用,并根据定义的切面插入相应的行为。 47、什么是编织(Weaving)? 编织(Weaving)是AOP的一个术语,指的是将切面与其他应用程序类型或对象链接在...

    Spring学习笔记,精华摘要

    在Spring框架中,工厂模式体现在Spring容器(BeanFactory或ApplicationContext)中,容器根据配置文件或编程方式来创建和管理bean。Spring容器不仅能创建bean,还能处理bean的生命周期,包括初始化、装配、管理和...

    J2EE_Spring之AOP与依赖注入例子

    在传统的Java代码中,对象常常通过构造函数、setter方法或全局变量来获取依赖。而依赖注入则是由外部容器(如Spring IoC容器)负责创建对象并管理它们之间的依赖关系,而不是由对象自身负责。这样,对象只需要声明其...

    44 Spring控制器Controller如何设置AOP?慕课专栏1

    这样,即使Controller在全局ApplicationContext中,`DispatcherServlet`也会自动发现并处理它们。 3. **自定义`WebApplicationInitializer`**:如果使用Java配置,可以通过实现`WebApplicationInitializer`接口来自...

Global site tag (gtag.js) - Google Analytics