通過監聽器 獲取Spring載入後的applicationContext
阿新 • • 發佈:2019-01-25
最近遇到的是這樣一個問題:
需要在Spring完成載入之後,獲取到Spring管理的 ApplicationContext。
上網查了幾個方法,大家都說實現介面ApplicationContextAware
實現該介面的setApplicationContext(ApplicationContext context)方法,並儲存ApplicationContext 物件。Spring初始化時,會通過該方法將ApplicationContext 物件注入。
但是實際操作中遇到了問題,配置了這個類,也加了SpringBean的配置,但是啟動的時候,Spring沒有幫我注入這個物件,我也不太明白為什麼,希望有明白的大神們講解一下。
PS:問題解決,參考[url]http://kewen1989.iteye.com/blog/1893994[/url]於是我就用了這樣一個方法實現:
還是實現了這樣一個介面:
由於我前面遇到的問題是,spring啟動的時候沒有幫我注入這個ApplicationContext的物件,那麼我就自己給它設進去,於是就在Spring啟動的監聽後面,自己加了一個監聽
監聽類實現如下:
這樣我們就可以在別的地方呼叫ApplicationContextHelper的getContext()方法,獲取到需要的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物件了