如何让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方法中处理。

 

posted @ 2016-12-31 14:45  yweihainan  阅读(2054)  评论(2编辑  收藏  举报