关于在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 实现应用初始化的时候,注入给应用上下文一些初始的公共数据
* !!这个类实际上是实例化两次,在listener一次,spring容器里又实例化一次,
* !!但是Spring中实例化是为了执行setApplicationContext来给静态的applicationContext赋值,否则这个注入方法是不会被执行的
* !!可以说这个注入方案是可以新建一个类实现的,符合面向对象思想,但是简单起见,直接这么玩也可以
* !!执行顺序: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对象不为空


你可能感兴趣的:(SSH)