• 使用监听器来启动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");
            
        }
    
    }
  • 相关阅读:
    【Unity】近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。
    extjs Combox 调用数据
    CSDN博客2014年4月24日清理缓存
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法訪问server。请验证实例名称是否正确而且 SQL Server 已配置为同意远程连接。
    海思 3520D 移植Qt4.5.3 一
    Android 输入框限制字符输入数
    Making User-Managed Backups-17.4、Making User-Managed Backups of Online Tablespaces and Datafiles
    spring 使用外部属性文件
    mysql字符串替换
    maven3+eclipse搭建webAPP企业级实战《一》
  • 原文地址:https://www.cnblogs.com/vieta/p/11142219.html
Copyright © 2020-2023  润新知