在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext
对象的生命周期,实际上就是监听 Web 应用的生命周期。
当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由
ServletContextListener 来处理。在 ServletContextListener
接口中定义了处理ServletContextEvent 事件的两个方法。
contextInitialized(ServletContextEvent sce) :当Servlet 容器启动Web
应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化,并且对那些在Web 应用启动时就需要被初始化的Servlet
进行初始化。 contextDestroyed(ServletContextEvent sce) :当Servlet 容器终止Web
应用时调用该方法。在调用该方法之前,容器会先销毁所有的Servlet 和Filter 过滤器。
新建SpringBean获取bean的帮助类
package com.rs.util.bean;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class SpringBean implements ServletContextListener {
private static WebApplicationContext springContext = null;
@Override
public void contextInitialized(ServletContextEvent sce) {
if (springContext == null) {
springContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
public static Object getBean(String name) {
return springContext.getBean(name);
}
public static <T> T getBean(Class<T> clazz) {
return springContext.getBean(clazz);
}
}
启动类中引用
package com.rs.domain;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.rs.util.bean.SpringBean;
@Configuration
@ComponentScan("com.rs")
@EnableAutoConfiguration
public class SysConfiguration {
public static void main(String[] args) {
SpringApplication.run(SysConfiguration.class, args);
}
/**
*
* @return
*/
@Bean
public SpringBean getSpringContext() {
return new SpringBean();
}
}
在具体线程中获取容器中的bean
package com.sino.task;
import com.sino.commons.context.SpringContext;
public class KafkaConsumerTask implements Runnable{
private CaseService caseService = SpringContext.getBean(CaseService.class);
@Override
public void run() {
}
}