在Web环境下,获取Spring的ApplicationContext的简便方法
?在web环境下,Spring的ApplicationContext是又容器管理的,通过ContextLoaderListener载入。要获取ApplicationContext需要先得到ServletContext,而得到ServletContext又要先获取session。而且每一个要使用ApplicationContext的地方都要这么做。
??? 但是,通过扩展ContextLoaderListener,我们可以很方便得获取到ApplicationContext。
??? 原理十分简单,ContextLoaderListener类里面有一个contextInitialized方法,这个方法用于初始化context。我们自己写一个ContextUtil工具类,里面有一个静态变量context,用来存放web环境下ApplicationContext的引用。
??? 先写ContextUtil类:
public class ContextUtil {
??? private static ApplicationContext context;
??? public static ApplicationContext getContext() {
??????? return context;
??? }
??? public static void setContext(ApplicationContext aContext) {
??????? context = aContext;
??? }
}
??? 然后写ContextLoaderListener的扩展类MyContextLoaderListener:
??? public class MyContextLoaderListener extends ContextLoaderListener{
??? @Override
??? public void contextInitialized(ServletContextEvent event){
??????? super.contextInitialized(event);
??????? ServletContext context = event.getServletContext();
???????? //获取web环境下的ApplicationContext
??????? ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
??????? //将ApplicationContext,set到ContextUtil的静态变量context
??????? ContextUtil.setContext(ctx);
??? }???????
??? }
最后在web.xml里面配置spring监听器,用我们刚刚扩展好的MyContextLoaderListener替换以前的ContextLoaderListener:
??? <listener>
??????? <listener-class>yourpackage.MyContextLoaderListener</listener-class>
??? </listener>