在ServletContextListener中使用Spring管理的bean

来源:互联网 发布:matlab 初始化零矩阵 编辑:程序博客网 时间:2024/06/03 12:25
package com.tang.back.web.listener;import java.util.List;import java.util.Map;import javax.servlet.ServletContext;import javax.servlet.ServletContextEvent;import javax.servlet.ServletContextListener;import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.support.WebApplicationContextUtils;import com.tang.back.dto.sys.DictionaryDetail;import com.tang.back.impl.service.DictionaryServiceImpl;/** * 获取系统字典数据,缓存在Application中以提高页面初始化性能 * * @author tang * @see [相关类/方法](可选) * @since [产品/模块版本] (可选) */public class DataCacheListener implements ServletContextListener{        private final static String DICTIONARY_CACHE = "dictionary";        @Override    public void contextInitialized(ServletContextEvent sce) {        final WebApplicationContext springContext = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext()); // 关键代码        final DictionaryServiceImpl dictionaryService = (DictionaryServiceImpl)springContext.getBean("dictionaryService"); // 关键代码                ServletContext application = sce.getServletContext();        Map<String, List<DictionaryDetail>> dict = dictionaryService.getAllDictionary();        application.setAttribute(DICTIONARY_CACHE, dict);    }    @Override    public void contextDestroyed(ServletContextEvent sce) {        ServletContext application = sce.getServletContext();        application.removeAttribute(DICTIONARY_CACHE);    }    }


上面的解决方案来自于stackoverflow:http://stackoverflow.com/questions/4746041/spring-injecting-a-dependency-into-a-servletcontextlistener


这里是另一个获得赞同数最多的答案,没细研究,记录在这里。

@Autowired private Properties props;@Overridepublic void contextInitialized(ServletContextEvent sce) {    WebApplicationContextUtils        .getRequiredWebApplicationContext(sce.getServletContext())        .getAutowireCapableBeanFactory()        .autowireBean(this);    //Do something with props    ...}    


0 0
原创粉丝点击