利用ServletContextListener 获取spring上下文

来源:互联网 发布:淘宝数据采集器破解版 编辑:程序博客网 时间:2024/06/05 18:37

你的需求是当服务器启动后加载一些数据,我们就可以使用ServletContextListener来满足需求
传统方式

app = new ClassPathXmlApplicationContext("xxx.xml");  

这样获取是不可以的,当j2ee容器启动后会或获取一次spring上下文,如果使用该方式会在一次获取上下文。自己想想就知道.

ServletContextListener 不受spring管理我们应该如何获取呢?

实际上spring同样使用了ServletContextListener接口,我们可以通过实现一个自己的ServletContextListener
来得到spring上下文
代码如下:

package com.xiaomaha.config;  import java.util.List;  import javax.servlet.ServletContextEvent;  import javax.servlet.ServletContextListener;  import org.springframework.context.ApplicationContext;  import org.springframework.context.support.ClassPathXmlApplicationContext;  import org.springframework.web.context.support.WebApplicationContextUtils;  public class InitialData implements ServletContextListener {      private static List dataList;      private ApplicationContext app;      public static List getDataList() {          return dataList;      }      public static void setDataList(List dataList) {          InitialData.dataList = dataList;      }      public void contextDestroyed(ServletContextEvent arg0) {          // TODO Auto-generated method stub      }      public void contextInitialized(ServletContextEvent event) {          app = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext()); //获取spring上下文!          app.getBean("UserService"); //获取到bean了,你就可以任意搞它了,想怎么搞就怎么搞          .............          //!最后得到的数据传递给dataList引用就O了!      }  }  

然后在web.xml配置一句

<listener>      <listener-class>          包+类名      </listener-class>  </listener>  

好了自己写一个类,在构造函数(一般spring都是配置构造函数,当然你也可以使用其它方法)里打印一句话,你可以看看服务器启动后是否会执行两次?

0 0