Spring MVC启动时初始化的几个常用方法
Spring-MVC的应用中,要实现类似的功能,主要是通过实现下面这些接口(任选一,至少一个即可)
一、ApplicationContextAware接口
| 1 2 3 4 5 6 7 8 9 | packageorg.springframework.context;importorg.springframework.beans.BeansException;importorg.springframework.beans.factory.Aware;importorg.springframework.context.ApplicationContext;publicinterfaceApplicationContextAware extendsAware {    voidsetApplicationContext(ApplicationContext var1) throwsBeansException;} | 
二、ServletContextAware 接口
三、InitializingBean 接口
四、ApplicationListener<ApplicationEvent> 接口
示例程序:
| 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 | packagetest.web.listener;importorg.apache.logging.log4j.*;importorg.springframework.beans.*;importorg.springframework.beans.factory.InitializingBean;importorg.springframework.context.*;importorg.springframework.context.event.ContextRefreshedEvent;importorg.springframework.stereotype.Component;importorg.springframework.web.context.ServletContextAware;importjavax.servlet.ServletContext;@ComponentpublicclassStartupListener implementsApplicationContextAware, ServletContextAware,        InitializingBean, ApplicationListener<ContextRefreshedEvent> {    protectedLogger logger = LogManager.getLogger();    @Override    publicvoidsetApplicationContext(ApplicationContext ctx) throwsBeansException {        logger.info("1 => StartupListener.setApplicationContext");    }    @Override    publicvoidsetServletContext(ServletContext context) {        logger.info("2 => StartupListener.setServletContext");    }    @Override    publicvoidafterPropertiesSet() throwsException {        logger.info("3 => StartupListener.afterPropertiesSet");    }    @Override    publicvoidonApplicationEvent(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方法中处理。
最后一步别忘了,在spring-config.xml中加入自定义的bean,如下面的例子:
<!--初始化操作的bean 在spring初始化完成的时候执行这个操作 -->
<bean class="com.**.firm.fclient.web.listener.ApplicationContextListener"/>
此外还有一种方法:
写个BEAN,将要执行的操作写在构造函数里,在将这个类配置到XML里,比如配置到SPRING-MVC.XML里 <bean class="com.test.xx"> 自己的类
不过不推荐使用这种方法
Spring MVC启动时初始化的几个常用方法的更多相关文章
- Spring MVC启动过程(1):ContextLoaderListener初始化
		此文来自https://my.oschina.net/pkpk1234/blog/61971 (写的特别好)故引来借鉴 Spring MVC启动过程 以Tomcat为例,想在Web容器中使用Spirn ... 
- Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源
		Spring Boot 2 (七):Spring Boot 如何解决项目启动时初始化资源 在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.今天就给大家介绍一个 Spri ... 
- SpringBoot 源码解析 (三)----- Spring Boot 精髓:启动时初始化数据
		在我们用 springboot 搭建项目的时候,有时候会碰到在项目启动时初始化一些操作的需求 ,针对这种需求 spring boot为我们提供了以下几种方案供我们选择: ApplicationRunn ... 
- 1.Spring项目启动时,加载相关初始化配置
		Spring项目启动时,会加载一些常用的配置: 1.加载spring上下文 SpringApplicationContextUtils.initApplicationContext(event.get ... 
- Docker容器启动时初始化Mysql数据库
		1. 前言 Docker在开发中使用的越来越多了,最近搞了一个Spring Boot应用,为了方便部署将Mysql也放在Docker中运行.那么怎么初始化 SQL脚本以及数据呢? 我这里有两个传统方案 ... 
- Spring mvc 启动 和 请求分发
		Spring mvc 启动 和 请求分发 启动加载: abstract class HttpServletBean extends HttpServlet void init() initServle ... 
- Spring MVC之DispatcherServlet初始化详解
		Spring作为一个优秀的web框架,其运行是基于Tomcat的.在我们前面的讲解中,Spring的驱动都是使用的ClassPathXmlApplicationContext,并且都是直接在main方 ... 
- Spring MVC启动流程分析
		本文是Spring MVC系列博客的第一篇,后续会汇总成贴子. Spring MVC是Spring系列框架中使用频率最高的部分.不管是Spring Boot还是传统的Spring项目,只要是Web项目 ... 
- spring mvc 启动过程及源码分析
		由于公司开源框架选用的spring+spring mvc + mybatis.使用这些框架,网上都有现成的案例:需要那些配置文件.每种类型的配置文件的节点该如何书写等等.如果只是需要项目能够跑起来,只 ... 
随机推荐
- 解决:夜神模拟器连不上adb的问题
			一. adb devices发现不了设备 刚试了一下,在夜神模拟器开启的情况下,adb devices 死活找不到设备 adb kill-server和adb start-server也无济于事 二. ... 
- SPOJ - VLATTICE
			链接 题意:三维平面,找从(0,0,0)看(n,n,n)能看到的点 题解:很明显就是求gcd(i,j,k)==1的(i,j,k)对数,改一下公式即可,记得要算平行坐标轴的三个平面,还有含0的三个坐标 ... 
- pxcook-高效易用的自动标注工具, 生成前端代码
			1.pxcook.sketch(http://www.fancynode.com.cn/pxcook) 
- Redis 数据备份与恢复,安全,性能测试,客户端连接,管道技术,分区(四)
			Redis 数据备份与恢复 Redis SAVE 命令用于创建当前数据库的备份. 语法 redis Save 命令基本语法如下: redis 127.0.0.1:6379> SAVE 实例 re ... 
- 31-THREE.JS 正方体
			<!DOCTYPE html> <html> <head> <title>Example 05.04 - Basic 2D geometries - C ... 
- 面向对象设计原则-SOLID
			SOLID的意思是: Single responsibility principle 单一职责原则 Open/close principle 开放/封闭原则 Liskov substitution p ... 
- 使用 nvm 管理多版本 node
			首先,使用下面的命令来安装 nvm $ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | b ... 
- Electron 使用 Webpack2 打包多入口应用程序
			Electron 使用 Webpack2 打包多入口应用程序 接前面一篇文章,前一篇文章中只有一个页面,并且只有一个js文件,所以打包的时候会把那个js打包成一个bundle.js文件.但是假如我们有 ... 
- 官方:MySQL 5.7 并行复制实现原理与调优 | InsideMySQL(转载)
			MySQL 5.7并行复制时代 众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL 5.7版本已经支持“真正”的并行复制功能, ... 
- socketserver模块简介
			1. socketserver模块简介 在python的socket编程中,实用socket模块的时候,是不能实现多个连接的,当然如果加入其 它的模块是可以的,例如select模块,在这里见到的介绍下 ... 
