spring mvc web应用启动时执行特定处理

来源:互联网 发布:张馨予淘宝店名 编辑:程序博客网 时间:2024/06/06 18:48

FROM: http://www.cnblogs.com/yjmyzz/p/4747251.html

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

一、ApplicationContextAware接口

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

二、ServletContextAware 接口

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

三、InitializingBean 接口

1
2
3
4
5
package org.springframework.beans.factory;
 
public interface InitializingBean {
    voidafterPropertiesSet() throwsException;
}

四、ApplicationListener<ApplicationEvent> 接口

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

示例程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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 implementsApplicationContextAware, ServletContextAware,
        InitializingBean, ApplicationListener<ContextRefreshedEvent> {
 
    protectedLogger logger = LogManager.getLogger();
 
    @Override
    publicvoid setApplicationContext(ApplicationContext ctx)throws BeansException {
        logger.info("1 => StartupListener.setApplicationContext");
    }
 
    @Override
    publicvoid setServletContext(ServletContext context) {
        logger.info("2 => StartupListener.setServletContext");
    }
 
    @Override
    publicvoid afterPropertiesSet()throws Exception {
        logger.info("3 => StartupListener.afterPropertiesSet");
    }
 
    @Override
    publicvoid 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方法中处理。

 


0 0