如何让spring mvc web应用启动时就执行特定处理
2015-08-21 11:03
381 查看
Asp.Net的应用中通过根目录下的Global.asax,在Application_Start方法中做一些初始化操作,比如:预先加载缓存项对网站热点数据进行预热,获取一些远程的配置信息等等。
Spring-MVC的应用中,要实现类似的功能,主要是通过实现下面这些接口(任选一,至少一个即可)
一、ApplicationContextAware接口
二、ServletContextAware 接口
三、InitializingBean 接口
四、ApplicationListener<ApplicationEvent> 接口
示例程序:
运行时,输出的顺序如下:
1 => StartupListener.setApplicationContext
2 => StartupListener.setServletContext
3 => StartupListener.afterPropertiesSet
4.1 => MyApplicationListener.onApplicationEvent
4.2 => MyApplicationListener.onApplicationEvent
4.1 => MyApplicationListener.onApplicationEvent
注意:onApplicationEvent方法会触发多次,初始化这种事情,越早越好,建议在setApplicationContext方法中处理。
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方法中处理。
相关文章推荐
- SpringMVC学习系列(6) 之 数据验证
- Eclipse 下利用 gradle 构建系统
- eclipse代码检查工具-FindBugs介绍
- Java基础12 类型转换与多态
- Java眼中的XML--文件读取--2 应用SAX方式解析XML
- java实现串口通信
- Spring整合Mongdb,实现基本的增,删,查,改
- 从svn检出的maven项目导入myeclipse中的步骤
- Spring事务管理
- eclipse下gradle配置
- java注解介绍和自定义注解实例
- MyEclipse快捷键大全-按快捷键分类(转自cnblogs MyEclipse快捷键大全)
- java-程序执行原理
- java 通过反射获得类的属性和调用方法
- 解决The hierarchy of the type is inconsistent错误
- 二叉树三种遍历 (Java)
- Eclipse安装Spket插件
- eclipse/myeclipse使用Memory Analyzer Tool (mat)方法
- 奇虎360Java笔试题
- Eclipse安装FindBugs