使用监听器来启动spring

Posted vieta

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用监听器来启动spring相关的知识,希望对你有一定的参考价值。

问题:

  数据初始化监听器要注入spring容器的对象,必须先启动spring容器才能使用监听器初始化数据。

解决:

  使用监听器来启动spring框架

问题:spring框架启动需要哪些参数?

1.需要指定配置文件或者配置类的位置

2.如果是使用注解的配置累,需要修改容器的类型

 

问题:监听器是不支持初始化参数的。参数如何传递到监听器里面?

答:通过设置再全局上下文参数里面,ContextLoaderListener监听器是通过获得上下文参数来解决这个问题的

<context-param>
      <param-name>contextConfigLocation</param-name> //注意这里对应的spring前端控制器的<param-value>不用写
      <param-value>org.chu.config</param-value>
    </context-param>
    <context-param>
       <param-name>contextClass</param-name>
       <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
    </context-param>
    <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

自定义数据初始化监听器

public class DataInitializeListener implements ServletContextListener  
    
    //问题:Spring的依赖注入只能在Spring容器中的对象使用。而监听器不是Spring容器的对象。
    //解决方法:在非容器里的对象获得容器里面的对象,容器对象.getBean();

    /**
     * 上下文初始化的时候调用的方法
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) 
    
     System.out.println("==启动啦==");
     ServletContext context = sce.getServletContext();
     //ApplicationContext 
     WebApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(context);
     RoleService roleService = applicationContext.getBean(RoleService.class);
     DictionaryService dictionaryService = applicationContext.getBean(DictionaryService.class);
     ModularService modularService=applicationContext.getBean(ModularService.class);
     PermissionService permissionService=applicationContext.getBean(PermissionService.class);
     UserService userService = applicationContext.getBean(UserService.class);
     AreaService areaService = applicationContext.getBean(AreaService.class);
     CustomerSerivce customerSerivce = applicationContext.getBean(CustomerSerivce.class);
     
    

    /**
     * 上下文销毁的时候调用的方法
     */
    @Override
    public void contextDestroyed(ServletContextEvent sce) 
        System.out.println("==关闭了==");
        ServletContext context = sce.getServletContext();
        context.removeAttribute("global_roles");
        context.removeAttribute("global_dictionarys");
        
    

 

以上是关于使用监听器来启动spring的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 启动事件和监听器,太强大了!

在Listener(监听器)定时启动的TimerTask(定时任务)中使用Spring@Service注解的bean

在Listener(监听器)定时启动的TimerTask(定时任务)中使用Spring@Service注解的bean

spring项目中监听器作用-ContextLoaderListener(项目启动时,加载一些东西到缓存中)

ssh整合之五struts和spring整合

spring配置文件默认名称及位置,ContextLoaderListener监听器作用