项目启动时,保存Spring的ApplicationContext实例

         今天遇到一个问题就是要实例化对象的一些对象的时候,里面需要用到数据库操作,所以里面有dao层的引用,但是这些要创建的对象,使用的参数都不一定一样的,所以在这些对象里我需要有一个ApplicationContext的引用来获取相应的资源对象。网上找了一下,找到了处理的方法,记录一下。为了避免多次加载或者获取ApplicationContext对象的麻烦,这个时候我们应该在项目启动的时候就把系统启动时的创建的那个ApplicationContext的实例保存起来,用一个静态变量保存,方便以后使用。做法就是继承ContextLoaderListener类,并重写contextInitialized方法,从里面取得ApplicationContext对象并保存。代码如下:

 

public class MyContextLoaderListener extends ContextLoaderListener {
	@Override
	public void contextInitialized(ServletContextEvent event) {
		ServletContext context = event.getServletContext(); 
        super.contextInitialized(event); 
        ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(context); 
        SystemApplicationContext.setContext(ctx);
	}
}

 

      然后修改web.xml文件,使用自己的applicaitonContext对象

 

<listener>
		<listener-class>com.cdj.test.MyContextLoaderListener</listener-class>
</listener>

 

      需要使用ApplicationContext对象的时候只要使用SystemApplicationContext.getContext();方法即可。

你可能感兴趣的:(spring)