1. 程式人生 > >通過監聽器 獲取Spring載入後的applicationContext

通過監聽器 獲取Spring載入後的applicationContext

最近遇到的是這樣一個問題:
需要在Spring完成載入之後,獲取到Spring管理的 ApplicationContext。

上網查了幾個方法,大家都說實現介面ApplicationContextAware
實現該介面的setApplicationContext(ApplicationContext context)方法,並儲存ApplicationContext 物件。Spring初始化時,會通過該方法將ApplicationContext 物件注入。

但是實際操作中遇到了問題,配置了這個類,也加了SpringBean的配置,但是啟動的時候,Spring沒有幫我注入這個物件,我也不太明白為什麼,希望有明白的大神們講解一下。

PS:問題解決,參考[url]http://kewen1989.iteye.com/blog/1893994[/url]於是我就用了這樣一個方法實現:


還是實現了這樣一個介面:
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物件了