利用ServletContextListener 获取spring上下文

64 篇文章 1 订阅

需求是当服务器启动后加载一些数据,我们就可以使用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) {  
        //获取spring上下文!  
        app = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext()); 
        //获取到bean了,你就可以任意搞它了,想怎么搞就怎么搞
        app.getBean("UserService");   
        .............  
        //!最后得到的数据传递给dataList引用就O了!  
    }  

}  

然后在web.xml配置一句

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

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

技术交流学习或者有任何问题欢迎加群:154514123

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值