利用ServletContextListener 获取spring上下文

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

传统方式

  1. app = new ClassPathXmlApplicationContext("xxx.xml");  
这样获取是不可以的,当j2ee容器启动后会或获取一次spring上下文,如果使用该方式会在一次获取上下文。自己想想就知道.

 

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

 

实际上spring同样使用了ServletContextListener接口,我们可以通过实现一个自己的ServletContextListener

来得到spring上下文

代码如下:

 

  1. package com.xiaomaha.config;  
  2.   
  3. import java.util.List;  
  4.   
  5. import javax.servlet.ServletContextEvent;  
  6. import javax.servlet.ServletContextListener;  
  7.   
  8. import org.springframework.context.ApplicationContext;  
  9. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  10. import org.springframework.web.context.support.WebApplicationContextUtils;  
  11.   
  12. public class InitialData implements ServletContextListener {  
  13.       
  14.     private static List dataList;  
  15.       
  16.     private ApplicationContext app;  
  17.   
  18.     public static List getDataList() {  
  19.         return dataList;  
  20.     }  
  21.   
  22.     public static void setDataList(List dataList) {  
  23.         InitialData.dataList = dataList;  
  24.     }  
  25.   
  26.     public void contextDestroyed(ServletContextEvent arg0) {  
  27.         // TODO Auto-generated method stub  
  28.   
  29.     }  
  30.   
  31.     public void contextInitialized(ServletContextEvent event) {  
  32.           
  33.         app = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext()); //获取spring上下文!  
  34.         app.getBean("UserService"); //获取到bean了,你就可以任意搞它了,想怎么搞就怎么搞  
  35.         .............  
  36.         //!最后得到的数据传递给dataList引用就O了!  
  37.     }  
  38.   
  39. }  

 

然后在web.xml配置一句

  1. <listener>  
  2.     <listener-class>  
  3.         包+类名  
  4.     </listener-class>  
  5. </listener>  

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值