zoukankan      html  css  js  c++  java
  • 如何让spring mvc web应用启动时就执行特定处理

    Asp.Net的应用中通过根目录下的Global.asax,在Application_Start方法中做一些初始化操作,比如:预先加载缓存项对网站热点数据进行预热,获取一些远程的配置信息等等。

    Spring-MVC的应用中,要实现类似的功能,主要是通过实现下面这些接口(任选一,至少一个即可)

    一、ApplicationContextAware接口

    package org.springframework.context;
    
    import org.springframework.beans.BeansException;
    import org.springframework.beans.factory.Aware;
    import org.springframework.context.ApplicationContext;
    
    public interface ApplicationContextAware extends Aware {
        void setApplicationContext(ApplicationContext var1) throws BeansException;
    }
    

    二、ServletContextAware 接口

    package org.springframework.web.context;
    
    import javax.servlet.ServletContext;
    import org.springframework.beans.factory.Aware;
    
    public interface ServletContextAware extends Aware {
        void setServletContext(ServletContext var1);
    }
    

    三、InitializingBean 接口

    package org.springframework.beans.factory;
    
    public interface InitializingBean {
        void afterPropertiesSet() throws Exception;
    }
    

    四、ApplicationListener<ApplicationEvent> 接口

    package org.springframework.context;
    
    import java.util.EventListener;
    import org.springframework.context.ApplicationEvent;
    
    public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
        void onApplicationEvent(E var1);
    }
    

    示例程序:

    package test.web.listener;
    
    import org.apache.logging.log4j.*;
    import org.springframework.beans.*;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.context.*;
    import org.springframework.context.event.ContextRefreshedEvent;
    import org.springframework.stereotype.Component;
    import org.springframework.web.context.ServletContextAware;
    import javax.servlet.ServletContext;
    
    @Component
    public class StartupListener implements ApplicationContextAware, ServletContextAware,
            InitializingBean, ApplicationListener<ContextRefreshedEvent> {
    
        protected Logger logger = LogManager.getLogger();
    
        @Override
        public void setApplicationContext(ApplicationContext ctx) throws BeansException {
            logger.info("1 => StartupListener.setApplicationContext");
        }
    
        @Override
        public void setServletContext(ServletContext context) {
            logger.info("2 => StartupListener.setServletContext");
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            logger.info("3 => StartupListener.afterPropertiesSet");
        }
    
        @Override
        public void onApplicationEvent(ContextRefreshedEvent evt) {
            logger.info("4.1 => MyApplicationListener.onApplicationEvent");
            if (evt.getApplicationContext().getParent() == null) {
                logger.info("4.2 => MyApplicationListener.onApplicationEvent");
            }
        }
    
    }
    

    运行时,输出的顺序如下:

    1 => StartupListener.setApplicationContext
    2 => StartupListener.setServletContext
    3 => StartupListener.afterPropertiesSet
    4.1 => MyApplicationListener.onApplicationEvent
    4.2 => MyApplicationListener.onApplicationEvent
    4.1 => MyApplicationListener.onApplicationEvent

    注意:onApplicationEvent方法会触发多次,初始化这种事情,越早越好,建议在setApplicationContext方法中处理。

  • 相关阅读:
    C++ 模板特化
    左值引用,右值引用以及移动语义
    搜狐2016研发工程师编程题
    java配置环境变量与常用技巧
    java在线聊天项目 使用SWT快速制作登录窗口,可视化窗口Design 更换窗口默认皮肤(切换Swing自带的几种皮肤如矩形带圆角)
    c++中的结构体:声明 定义 初始化
    用指针变量作函数形参接收数组地址,解决10个整数按由小到大顺序排序问题
    java在线聊天项目 实现基本聊天功能后补充的其他功能详细需求分析 及所需要掌握的Java知识基础 SWT的激活方法,swt开发包下载,及破解激活码
    java在线聊天项目1.0版 异常处理——开启多个客户端,关闭一个客户端后,在其他客户端中再发出信息会出现异常的处理
    第十一次作业
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/4747251.html
Copyright © 2011-2022 走看看