关于在listener中获取spring容器中对象的方法



import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;


/**
 * 
 * @author AshtarEve
 *
 * @version 1.0
 *
 * @date 2016年11月17日--下午5:55:29
 * 
 * @Description 实现应用初始化的时候,注入给应用上下文一些初始的公共数据<br>
 *              !!这个类实际上是实例化两次,在listener一次,spring容器里又实例化一次,<br>
 *              !!但是Spring中实例化是为了执行setApplicationContext来给静态的applicationContext赋值,否则这个注入方法是不会被执行的<br>
 *              !!可以说这个注入方案是可以新建一个类实现的,符合面向对象思想,但是简单起见,直接这么玩也可以<br>
 *              !!执行顺序:listener->spring容器给listener属性初始化->执行listener的contextInitialized方法
 *
 */
@WebListener
@Component
public class InitListener implements ServletContextListener, ApplicationContextAware {

	private static ApplicationContext applicationContext;

	public InitListener() {
		System.out.println("con");
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		System.out.println("注入");
		InitListener.applicationContext = applicationContext;
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
	}

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		ServletContext servletContext = sce.getServletContext();

		System.out.println(applicationContext == null);
	}

}


执行顺序:listener->spring容器给listener属性初始化->执行listener的contextInitialized方法

执行结果(略去日志部分):

con——web容器初始化时的listener构造方法执行

con——spring容器初始化时listener构造方法执行

注入——执行setApplicationContext方法

false——得到spring的applicationContext对象不为空


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值