`

使用ApplicationContextAware得到一个ApplicationContext对象

 
阅读更多
http://blog.csdn.net/tohmin/article/details/6015289

import org.springframework.beans.BeansException;  
import org.springframework.context.ApplicationContext;  
import org.springframework.context.ApplicationContextAware;  
/** 
 * 
 * @author MinFei 
 */  
public class ApplicationContextHelper implements ApplicationContextAware {  
    private static ApplicationContext appCtx;  
    /** 
     * 此方法可以把ApplicationContext对象inject到当前类中作为一个静态成员变量。 
     * @param applicationContext ApplicationContext 对象. 
     * @throws BeansException 
     */  
    @Override  
    public void setApplicationContext( ApplicationContext applicationContext ) throws BeansException {  
        appCtx = applicationContext;  
    }  
    /** 
     * 这是一个便利的方法,帮助我们快速得到一个BEAN 
     * @param beanName bean的名字 
     * @return 返回一个bean对象 
     */  
    public static Object getBean( String beanName ) {  
        return appCtx.getBean( beanName );  
    }  
}  



<bean id="SpringApplicationContext" class="com.company.helper.ApplicationContextHelper"  lazy-init="false"></bean>



BeanExample beanExample= (BeanExample )ApplicationContextHelper.getBean( "beanExample" );  



只是介绍想法: 实现细节见上面的URL.
我们都知道要访问Spring bean 我们就必须得到一个ApplicationContext 或者 BeanFactory 对象, 而ApplicationContext的BeanFactory 的子类, 拥有更强大的功能,ApplicationContext可以在服务器启动的时候自动实例化所有的bean,而 BeanFactory只有在调用getBean()的时候才去实例化那个bean, 这也是我们为什么要得到一个ApplicationContext对象, 事实上Spring2相关的web应用默认使用的是ApplicationContext对象去实例化bean, 换一句话说, 在服务器启动的时候,Spring容器就已经实例化好了一个ApplicationContext对象,所以我们要在老的代码里尝试去获取这个对象。 但是如何才能得到一个ApplicationContext对象呢?方法很多,最常用的办法就是用
ClassPathXmlApplicationContext,
FileSystemClassPathXmlApplicationContext,
FileSystemXmlApplicationContext
等对象去加载Spring配置文件,这样做也是可以, 但是在加载Spring配置文件的时候,就会生成一个新的ApplicaitonContext对象而不是Spring容器帮我们生成的哪一个, 这样就产生了冗余, 所以我们在这里不采用这种加载文件的方式,我们使用ApplicationContextAware让Spring容器传递自己生成的ApplicationContext给我们, 然后我们把这个ApplicationContext设置成一个类的静态变量, 这样我们就随时都可以在老的代码里得到Application的对象了。
分享到:
评论

相关推荐

    Spring中ApplicationContext对事件传递

    事件源(source)是一个对象,通常是指触发事件的对象。 ##### 2. 事件的监听者 监听者需要实现`ApplicationListener`接口,并重写`onApplicationEvent`方法。当事件被触发时,这个方法会被调用。例如: ```java ...

    Spring获取webapplicationcontext,applicationcontext几种方法详解

    方法一:在初始化时保存 ApplicationContext 对象 在独立应用程序中,通过手工初始化 Spring 容器,可以使用以下方式获取 ApplicationContext 对象: `ApplicationContext ac = new ...

    SpringBoot获取ApplicationContext的3种方式

    Spring提供了一个名为ApplicationContextAware的接口,该接口提供了一个setApplicationContext方法,在Bean初始化后,Spring会判断该Bean是否实现了该接口,如果是,则调用setApplicationContext方法,并将容器中的...

    spring中通过ApplicationContext getBean获取注入对象的方法实例

    当Spring容器创建了一个实现了`ApplicationContextAware`的Bean时,会自动调用其`setApplicationContext`方法,传入当前的`ApplicationContext`实例。这样,我们就可以在程序中静态持有这个`ApplicationContext`,...

    Spring Aware标记接口使用案例解析

    ApplicationContextAware 是 Spring 中最常用的 Aware 接口之一,它提供了对ApplicationContext对象的访问能力。通过实现 ApplicationContextAware 接口,Bean 对象可以获取到ApplicationContext 对象,从而访问 ...

    普通对象使用spring容器中的对象的实现方法

    在实现方法中,我们首先需要创建一个SpringBeanUtil类,这个类实现了ApplicationContextAware接口。然后,我们可以使用这个类来获取spring容器中的对象。例如,我们可以使用getBeanByClass方法来根据类类型来获取...

    Spring Boot中Bean定义方调用方式解析

    例如,我们可以在一个普通的 Java 类中使用以下代码来获取 applicationContext 对象: ```java public class MyClass { public void myMethod() { ApplicationContext applicationContext = SpringUtil....

    spring-aware接口实现与bean作用域(spring多容器层面)

    `ApplicationContextAware`是其中的一个典型接口,当我们想要在非托管类(即非Spring Bean)中获取Spring容器中的其他Bean时,可以使用这个接口。 `ApplicationContextAware`接口提供了`setApplicationContext`方法...

    Spring组件开发模式支持SPEL表达式

    在Spring组件开发模式中,支持SPEL表达式的实现原理是通过实现 ApplicationContextAware 接口,获取ApplicationContext对象,然后使用StandardBeanExpressionResolver解析SPEL表达式。在解析SPEL表达式时,需要使用...

    Spring实现Aware接口自定义获取bean的两种方式

    在JUnit测试中,我们可以使用ClassPathXmlApplicationContext来获取ApplicationContext对象,然后使用getBean方法来获取bean对象。代码如下: @Test public void test() throws SQLException { //通过从classpath...

    Spring在代码中获取bean的几种方式详解

    "Spring在代码中获取bean的几种方式详解" Spring框架是Java应用程序...这种方式适用于需要在多个地方获取ApplicationContext对象的场景。 Spring提供了多种方式来获取Bean实例,我们可以根据实际情况选择合适的方式。

    获取Spring容器

    首先,在`spring-context.xml`中添加一个名为`ApplicationContextUtil`的Bean,该Bean用于实现`ApplicationContextAware`接口,以便Spring容器能够自动注入`ApplicationContext`。 ```xml ``` ##### 2. 实现`...

    Java获取Bean的几种方式.pdf

    1. **初始化时保存ApplicationContext对象** 当应用启动时,可以创建ApplicationContext实例并保存,以便后续使用。例如,通过`FileSystemXmlApplicationContext`加载XML配置文件创建Bean容器: ```java ...

    spring RMI 服务(自动把service发布为RMI服务)

    RMI是Java提供的一种标准接口,它允许一个Java对象调用远程主机上的另一个Java对象的方法,就像调用本地对象一样。在RMI中,远程对象需要实现`java.rmi.Remote`接口,并声明可能抛出`java.rmi.RemoteException`的...

    SpringPython使用介绍指南.doc

    任何实现了`ApplicationContextAware`接口的对象都将拥有一个额外的`app_context`属性,这个属性指向当前的`ApplicationContext`对象,从而使得这些对象可以访问到容器本身。 **示例代码**: ```python from spring...

    详解SpringBoot 多线程处理任务 无法@Autowired注入bean问题解决

    在 SpringBoot 多线程处理任务中无法使用 @Autowired 注入 bean 的问题,可以通过创建一个工具类来解决,这个工具类可以用于获取 bean 对象,从而解决多线程处理任务中无法使用 @Autowired 注入 bean 的问题。

    spring-reference1.2.pdf

    - **使用MessageSource**:ApplicationContext提供了一个MessageSource接口,用于国际化消息处理。 - **传播事件**:可以利用ApplicationContext发布和监听事件。 - **低级别资源和ApplicationContext**:...

    Spring在应用中获得Bean的方法

    如果你知道Bean的类型,可以使用`getBean(Class&lt;T&gt; requiredType)`方法,Spring会返回与给定类型匹配的第一个Bean。 ```java ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); ...

    spring强行注入和引用实例解析

    当我们有一个`DataProvider`对象并想对其进行初始化时,先检查它是否实现了`InitializingBean`接口,如果实现了,则调用`afterPropertiesSet()`方法。接着,使用`AutowireCapableBeanFactory`的`autowireBean()`方法...

    Web项目中获取SpringBean与在非Spring组件中获取SpringBean.pdf

    因此,Spring 2.5及以后的版本引入了基于注解的依赖注入,我们可以使用`@Autowired`注解配合静态内部类来实现类似的功能,创建一个静态的`SpringFactory`对象: ```java package org.ahe.util; import org.spring...

Global site tag (gtag.js) - Google Analytics