使用Listener准备application作用域数据的小问题

简介: 在程序中,有些数据我们希望在程序启动的时候就准备好,并且只准备一次,放在application作用域中,这时候,我们通常会用Listener来准备这些数据。但是,用Listener准备application作用域的数据,在获取容器的时候会有一些小问题。

在程序中,有些数据我们希望在程序启动的时候就准备好,并且只准备一次,放在application作用域中,这时候,我们通常会用Listener来准备这些数据。但是,用Listener准备application作用域的数据,在获取容器的时候会有一些小问题。


public class InitListener implements ServletContextListener {
  //该Listener配置在web.xml里,默认通过反射生成实例,来得到这个对象实例来执行
  //并没有从Spring容器里面获取,Tomcat没有找Spring容器,所以此处无法使用注解
  //如果使用注解,会生成两个对象,一个Tomcat产生的对象,一个Spring容器注入的对象
  //Tomcat会使用自己产生的对象,而Spring管理的对象没人使用
  public void contextInitialized(ServletContextEvent sce) {
    // 获取全局唯一的容器对象,即在web.xml中配置的由Spring的ContextLoaderListener生成的那个容器
    //方法1:ApplicationContext ac = sce.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
    //方法2:
    //其中getWebApplicationContext(sce.getServletContext())会自动以ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE为key把该容器对象找出来
    ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(sce.getServletContext());
    //通过容器拿到Service对象
    PrivilegeService privilegeService = (PrivilegeService) ac.getBean("privilegeServiceImpl");
    //sce:当前的事件
    // 准备数据:topPrivilegeList
    List<Privilege> topPrivilegeList = privilegeService.findTopList();
    sce.getServletContext().setAttribute("topPrivilegeList", topPrivilegeList);
    System.out.println("------------> 已准备数据topPrivilegeList<------------");
    // 准备数据:allPrivilegeUrls
    Collection<String> allPrivilegeUrls = privilegeService.getAllPrivilegeUrls();
    sce.getServletContext().setAttribute("allPrivilegeUrls", allPrivilegeUrls);
    System.out.println("------------> 已准备数据allPrivilegeUrls <------------");
  }
  public void contextDestroyed(ServletContextEvent arg0) {
  }



相关文章
service方法的介绍,及如何将config对象如何提升作用域
service方法的介绍,及如何将config对象如何提升作用域
|
前端开发 Java 应用服务中间件
Error configuring application listener of class org.springframework.web.context.ContextLoader
Error configuring application listener of class org.springframework.web.context.ContextLoader
Error configuring application listener of class org.springframework.web.context.ContextLoader
|
Java 应用服务中间件 Maven
Error configuring application listener of class org.springframework.web.context.ContextLoaderListene
Error configuring application listener of class org.springframework.web.context.ContextLoaderListene
111 0
|
缓存 Android开发
Application 的简单介绍和生命周期
Application 的简单介绍和生命周期
Application 的简单介绍和生命周期
|
Java 应用服务中间件
Servlet三大作用域:Request、Session、Application
Servlet三大作用域:Request、Session、Application
220 0
|
程序员
Callback、Listener、Worker、Manager的命名说明
Callback、Listener、Worker、Manager的命名说明
92 0
|
Dubbo Java 应用服务中间件
实现 Application1 调用 Service1 | 学习笔记
快速学习实现 Application1 调用 Service1。
|
Java
JavaWeb-监听器Listener解析与实例
JavaWeb-监听器Listener解析与实例
213 0
JavaWeb-监听器Listener解析与实例