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

    Spring-MVC的应用中,要实现应用启动时就执行特定处理的功能,主要是通过实现下面这些接口(任选一,至少一个即可)

    一、ApplicationContextAware接口

    1 package org.springframework.context;
    2  
    3 import org.springframework.beans.BeansException;
    4 import org.springframework.beans.factory.Aware;
    5 import org.springframework.context.ApplicationContext;
    6  
    7 public interface ApplicationContextAware extends Aware {
    8     void setApplicationContext(ApplicationContext var1) throws BeansException;
    9 }

    二、ServletContextAware 接口

    1 package org.springframework.web.context;
    2  
    3 import javax.servlet.ServletContext;
    4 import org.springframework.beans.factory.Aware;
    5  
    6 public interface ServletContextAware extends Aware {
    7     void setServletContext(ServletContext var1);
    8 }

    三、InitializingBean 接口

    1 package org.springframework.beans.factory;
    2  
    3 public interface InitializingBean {
    4     void afterPropertiesSet() throws Exception;
    5 }

    四、ApplicationListener<ApplicationEvent> 接口

    1 package org.springframework.context;
    2  
    3 import java.util.EventListener;
    4 import org.springframework.context.ApplicationEvent;
    5  
    6 public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {
    7     void onApplicationEvent(E var1);
    8 }

    示例程序:

     1 package test.web.listener;
     2  
     3 import org.apache.logging.log4j.*;
     4 import org.springframework.beans.*;
     5 import org.springframework.beans.factory.InitializingBean;
     6 import org.springframework.context.*;
     7 import org.springframework.context.event.ContextRefreshedEvent;
     8 import org.springframework.stereotype.Component;
     9 import org.springframework.web.context.ServletContextAware;
    10 import javax.servlet.ServletContext;
    11  
    12 @Component
    13 public class StartupListener implements ApplicationContextAware, ServletContextAware,
    14         InitializingBean, ApplicationListener<ContextRefreshedEvent> {
    15  
    16     protected Logger logger = LogManager.getLogger();
    17  
    18     @Override
    19     public void setApplicationContext(ApplicationContext ctx) throws BeansException {
    20         logger.info("1 => StartupListener.setApplicationContext");
    21     }
    22  
    23     @Override
    24     public void setServletContext(ServletContext context) {
    25         logger.info("2 => StartupListener.setServletContext");
    26     }
    27  
    28     @Override
    29     public void afterPropertiesSet() throws Exception {
    30         logger.info("3 => StartupListener.afterPropertiesSet");
    31     }
    32  
    33     @Override
    34     public void onApplicationEvent(ContextRefreshedEvent evt) {
    35         logger.info("4.1 => MyApplicationListener.onApplicationEvent");
    36         if (evt.getApplicationContext().getParent() == null) {
    37             logger.info("4.2 => MyApplicationListener.onApplicationEvent");
    38         }
    39     }
    40  
    41 }

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

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

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

  • 相关阅读:
    递归浅析
    python3中zip()的用法
    在早期IBP病人中比较风湿病医生诊断中轴型SpA(aSpA)与非aSpA
    超声检查附着点在早期SpA诊断中的应用
    验证MRI检测AS病人骶髂关节骨侵蚀、扩展侵蚀和回填
    EULAR2008_TNF拮抗剂保护RA骨关节的机制可能不止是抑制滑膜炎
    RA关节功能残疾与软骨破坏的相关性高于骨破坏
    TNFBA治疗强柱达8年的放射学评估
    荟萃分析随机对照临床试验显示抗TNF治疗未增加早期RA病人的严重感染和肿瘤发生风险
    早期IBP病人骶髂关节MRI炎症与1年后MRI结构破坏之间的关系
  • 原文地址:https://www.cnblogs.com/wihainan/p/6239263.html
Copyright © 2011-2022 走看看