`

在Web中任意位置得到Spring ApplicationContext

阅读更多

Access the Spring-ApplicationContext from everywhere in your Application

-- from  http://blog.jdevelop.eu/2008/07/06/access-the-spring-applicationcontext-from-everywhere-in-your-application/



In this blog i will show you a short hint how you can access your Spring-ApplicationContext from everywhere in your Application.

Imagine you have an application (e.g. a web or swing-application) which you now want to be Spring-enabled. Ok you add the Spring libraries and the Configuration-file and create your Spring-beans. But there are still some old class-files which you can’t use in this way. These files still need access to the Spring-Honeypot where all the goodies exists and you don’t want to redesign your application.

First create the class “ApplicationContextProvider“. This class implements theApplicationContextAware. A bean which implements the ApplicationContextAware-interface and is deployed into the context, will be called back on creation of the bean, using the interface’s setApplicationContext(…) method, and provided with a reference to the context, which may be stored for later interaction with the context.

ApplicationContextProvider.java

  1. package context; 
  2.  
  3. import org.springframework.beans.BeansException; 
  4. import org.springframework.context.ApplicationContext; 
  5. import org.springframework.context.ApplicationContextAware; 
  6.  
  7. /**
  8.  * This class provides an application-wide access to the
  9.  * Spring ApplicationContext! The ApplicationContext is
  10.  * injected in a static method of the class "AppContext".
  11.  *
  12.  * Use AppContext.getApplicationContext() to get access
  13.  * to all Spring Beans.
  14.  *
  15.  * @author Siegfried Bolz
  16.  */ 
  17. public class ApplicationContextProvider implements ApplicationContextAware { 
  18.  
  19.     public void setApplicationContext(ApplicationContext ctx) throws BeansException { 
  20.         // Wiring the ApplicationContext into a static method 
  21.         AppContext.setApplicationContext(ctx); 
  22.     } 
  23. // .EOF 


This bean must be initialized in the Spring-Configuration file:

applicationContext.xml

  1. <bean id="contextApplicationContextProvider" class="context.ApplicationContextProvider"></bean> 



The key for success is located in the in the method “setApplicationContext(…)“, here we are wiring the injected ApplicationContext into the static method “public static void setApplicationContext(ApplicationContext applicationContext) of the class “AppContext“:

AppContext.java

  1. package context; 
  2.  
  3. import org.springframework.context.ApplicationContext; 
  4.  
  5. /**
  6.  * This class provides application-wide access to the Spring ApplicationContext.
  7.  * The ApplicationContext is injected by the class "ApplicationContextProvider".
  8.  *
  9.  * @author Siegfried Bolz
  10.  */ 
  11. public class AppContext { 
  12.  
  13.     private static ApplicationContext ctx; 
  14.  
  15.     /**
  16.      * Injected from the class "ApplicationContextProvider" which is automatically
  17.      * loaded during Spring-Initialization.
  18.      */ 
  19.     public static void setApplicationContext(ApplicationContext applicationContext) { 
  20.         ctx = applicationContext; 
  21.     } 
  22.  
  23.     /**
  24.      * Get access to the Spring ApplicationContext from everywhere in your Application.
  25.      *
  26.      * @return
  27.      */ 
  28.     public static ApplicationContext getApplicationContext() { 
  29.         return ctx; 
  30.     } 
  31. // .EOF 


Now you have access from all class-files to the Spring-ApplicationContext in your application, if you call the static method:

Poorfile.java

  1. ApplicationContext ctx = AppContext.getApplicationContext(); 
  2. Honeypotbean honey = (HoneyPotBean) ctx.getBean("honey"); 


Do you have any improvements? Please drop a comment below.

 

分享到:
评论

相关推荐

    Spring与Web环境集成.pdf

    这样,我们就可以在任意位置从域中获得应用上下文ApplicationContext对象了。 2. Spring提供获取应用上下文的工具 Spring框架提供了一个监听器ContextLoaderListener,就是对上述功能的封装,该监听器内部加载...

    浅析Spring配置中的classpath:与classpath*:的区别

    通常我们使用这种写法是在 web.xml 中,例如 Spring 加载 bean 的上下文时。classpath: 只会到你的 class 路径中查找文件,不会包括 jar 文件中的 class 路径。 classpath*:是指不仅包含 class 路径,还包括 jar ...

    spring管理struts的action的代码

    为了实现Spring对Struts Action的管理,我们需要在Web应用中配置Spring容器,并通过Spring来创建和管理Struts中的Action实例。这样做的好处在于,Action实例的生命周期和依赖关系都可以由Spring容器来管理,提高了...

    spring3.1中文参考文档

    - **依赖注入**(Dependency Injection, DI)是一种设计模式,允许将对象间的依赖关系通过外部构造并注入到对象中,而不是在对象内部自行创建依赖。 - **控制反转**(Inversion of Control, IoC)是指程序的控制流程...

    spring6小细节.docx

    在 Spring 配置文件中,可以定义任意类的 Bean,不仅限于自定义的类,也可以使用 JDK 中的类,例如 java.util.Date。唯一的要求是该类不能是抽象的,并且提供了无参数构造方法。 六、getBean() 方法 getBean() ...

    Spring基本知识点教程+案例演示

    - **BeanFactory**:这是Spring最基础的容器接口,它负责生产任意bean,采用延迟加载的方式,在第一次调用`getBean`方法时才会初始化bean。 - **ApplicationContext**:它是`BeanFactory`的子接口,提供了更多高级...

    Spring Reference Core Technologies

    在Spring框架的核心技术中,IoC(Inversion of Control,控制反转)容器扮演着至关重要的角色。本章节将详细介绍Spring IoC容器的基本概念及其配置方式。 ##### 1.1 Spring IoC容器简介 IoC容器是Spring框架中的一...

    Spring Reference - Core Technologies.pdf

    Spring框架是Java企业应用开发的事实标准,它为开发者提供了全面的...在Spring框架的学习和应用中,开发者需要深刻理解这些核心知识点,只有这样,才能充分利用Spring提供的强大功能来构建高效、可维护的Java企业应用。

    Spring入门案例对应源代码

    SSM是Spring、Spring MVC和MyBatis的组合,是Java Web开发中的常见栈。虽然这里只提到了Spring,但了解SSM可以帮助你理解Spring在实际项目中的应用,如如何与MVC框架配合处理HTTP请求,以及如何与持久层框架如...

    spring-3.1.0中文版api帮助文档

    - **面向Java EE的ApplicationContext**:描述ApplicationContext在Java EE环境中的高级功能。 **2.2 多种依赖注入方式** - **设值注入**:通过setter方法进行依赖注入的方式。 - **构建器注入**:在构造函数中...

    几种spring获取bean的方法.txt

    在Web环境下,Spring提供了`WebApplicationContext`接口,它是`ApplicationContext`的子接口,专门用于Web应用。可以通过`WebApplicationContextUtils`工具类中的静态方法`getWebApplicationContext()`来获取当前Web...

    Spring3.1 中文参考文档

    - **4.2.3 使用容器**:讲解了如何在应用程序中使用Spring IoC容器。 **4.3 Bean概述** - **4.3.1 命名bean**:说明了如何为bean命名。 - **4.3.1.1 在bean定义外面起别名**:介绍了如何为bean定义别名。 - **...

    spring core官方文档.pdf

    - **基于setter的依赖注入**:依赖项通过setter方法设置,这种方式在Spring早期版本中较为常见。 - **依赖解析过程**:描述了Spring如何解析并注入依赖项的过程。 - **依赖和配置细节** - **直值**(如原始类型...

    Spring笔记.doc

    控制反转是一种设计模式,它将对象的创建和管理从应用程序本身剥离出来,转交给一个外部容器(在 Spring 中即为 IoC 容器)。这使得组件之间的依赖关系不再硬编码,而是通过配置来定义。例如,在传统的开发方式中,...

    Spring内容介绍

    在IT行业中,Spring广泛应用于企业级应用开发。以下是从提供的文件内容中提取的关键知识点: 1. Spring框架的介绍 文件中提及Spring Framework,它是一种全面的编程和配置模型,是企业应用开发的基石。Spring框架...

    spring-core.pdf

    在《spring-core.pdf》文档中,主要介绍了Spring框架的核心技术(Core Technologies),特别是第5.3.2版中关于IoC容器的详细内容。IoC(Inversion of Control)容器是Spring框架的核心组成部分之一,它负责管理应用...

    spring开发指南

    ### Spring开发指南知识点详解 #### 一、Spring框架概述 - **起源与发展**:Spring...通过以上内容的学习,开发者可以深入了解Spring框架的基本概念、核心功能及其在实际开发中的应用,从而更好地掌握Spring开发技巧。

    ssh(struts、spring、hibernate)集成

    2. **Action类**:创建一个`UserAction`类,继承自`ActionSupport`,并在`execute`方法中通过`getWebApplicationContext()`获取ApplicationContext,进一步通过`getBean()`方法得到`UserService`实例,然后调用...

Global site tag (gtag.js) - Google Analytics