通过监听器 获取Spring加载后的applicationContext

最近遇到的是这样一个问题:
需要在Spring完成加载之后,获取到Spring管理的 ApplicationContext。

上网查了几个方法,大家都说实现接口ApplicationContextAware
实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。Spring初始化时,会通过该方法将ApplicationContext 对象注入。

但是实际操作中遇到了问题,配置了这个类,也加了SpringBean的配置,但是启动的时候,Spring没有帮我注入这个对象,我也不太明白为什么,希望有明白的大神们讲解一下。

PS:问题解决,参考 http://kewen1989.iteye.com/blog/1893994于是我就用了这样一个方法实现:


还是实现了这样一个接口:
public class ApplicationContextHelper implements ApplicationContextAware
{
    private static ApplicationContext context;

    @Override
    public void setApplicationContext(ApplicationContext contex) throws BeansException
    {
        ApplicationContextHelper.context = contex;
    }

    public static ApplicationContext getContext()
    {
        return context;
    }

}

由于我前面遇到的问题是,spring启动的时候没有帮我注入这个ApplicationContext的对象,那么我就自己给它设进去,于是就在Spring启动的监听后面,自己加了一个监听
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<listener>
		<listener-class>com.kewen.util.GetContext</listener-class>
	</listener>


监听类实现如下:
public class GetContext implements ServletContextListener
{
    private static WebApplicationContext webApplicationContext;
    
    private static ApplicationContextHelper helper = new ApplicationContextHelper();

    @Override
    public void contextDestroyed(ServletContextEvent arg0)
    {

    }

    @Override
    public void contextInitialized(ServletContextEvent arg0)
    {
        webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(arg0.getServletContext());
        helper.setApplicationContext(webApplicationContext);  
    }


这样我们就可以在别的地方调用ApplicationContextHelper的getContext()方法,获取到需要的ApplicationContext对象了

猜你喜欢

转载自kewen1989.iteye.com/blog/1891124
今日推荐