利用Spring的ApplicationEvent执行自定义方法
在Spring中已经定义了五个标准事件,分别介绍如下:
1)ContextRefreshedEvent:当ApplicationContext初始化或者刷新时触发该事件。
2)ContextClosedEvent:当ApplicationContext被关闭时触发该事件。容器被关闭时,其管理的所有单例Bean都被销毁
3) RequestHandleEvent:在Web应用中,当一个http请求(request)结束触发该事件
4)ContestStartedEvent:Spring2.5新增的事件,当容器调用ConfigurableApplicationContext的Start()方法开始/重新开始容器时触发该事件
5)ContestStopedEvent:Spring2.5新增的事件,当容器调用ConfigurableApplicationContext的Stop()方法停止容器时触发该事件
至于之后是否新增的暂时没研究
业务需求:项目启动时向数据库或者Redis初始化微信的access_token
新建SysInition(自定义名字)类,实现ApplicationListener接口,并监控ContextRefreshedEvent事件,在onApplicationEvent()方法中添加事件处理代码
import javax.annotation.Resource;import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;import com.phil.hi.service.auth.AuthTokenService;/*** 项目初始化操作类* * @author phil* @date 2017年7月9日**/
public class SysInition implements ApplicationListener<ContextRefreshedEvent> {private static final Logger logger = Logger.getLogger(SysInition.class);@Resourceprivate AuthTokenService authTokenService;private static boolean flag = false; //防止二次调用@Overridepublic void onApplicationEvent(ContextRefreshedEvent event) {if (!flag) {flag= true;String token = authTokenService.findToken();if (StringUtils.isBlank(token)) {logger.info("token is null in db");authTokenService.saveToken();}}}
}
spring配置文件:
<bean id="sysInition" class="com.phil.hi.config.SysInition"></bean>
注解定义
在类前加上@Component或@Controller,然后在<context:component-scan base-package="">里加上你的类所在的包名
解决onApplicationEvent(方法被执行两次以上的问题
原因:无论是使用spring还是spring mvc,系统会存在两个容器,一个是root application context ,另一个就是projectName-servletContext(作为root application context的子容器)。这种情况下,就会造成onApplicationEvent方法被执行两次。
解决方法:如代码所示,用个标志标记是否已执行
转载于:https://www.cnblogs.com/phil_jing/p/7141513.html
利用Spring的ApplicationEvent执行自定义方法相关推荐
- 利用spring aop统一处理异常和打日志
利用spring aop统一处理异常和打日志 spring aop的概念,很早就写博客介绍了,现在在工作中真正使用. 我们很容易写出的代码 我们很容易写出带有很多try catch 和 logger. ...
- 利用Spring框架封装的JavaMail现实同步或异步邮件发送
利用Spring框架封装的JavaMail现实同步或异步邮件发送 作者:张纪豪 J2EE简单地讲是在JDK上扩展了各类应用的标准规范,邮件处理便是其中一个重要的应用.它既然是规范,那么我们就可以通过J ...
- 利用spring AOP注解实现日志管理
最近刚接手一个项目,在项目的开始阶段,我们的架构师分配了个任务给我,让我利用spring的切面技术做一个日志管理的案例.要求很简单,就是需要记录:谁在什么时候对谁做了什么操作,同时在日志的描述中还要有 ...
- Spring的ApplicationEvent的使用
Spring的ApplicationEvent的使用 Spring 3.0中提供了很多类似*Aware的类,其中ApplicationContextAware接口可以实现我们在初始化bean的时候给b ...
- 利用Spring的AbstractRoutingDataSource解决多数据源的读写分离问题
背景 最近项目中为了提高数据库读写速度,想要横向扩展Oracle数据库,一个Master,多个Slave.master可以读写数据,Slave只能读数据.这就是多数据源问题了.怎么利用Spring解决 ...
- java 扫描自定义注解_利用spring 自定义注解扫描 找出使用自定义注解的类
我们常常有扫描项目里带有指定注解的class, 下面是利用spring扫描自定义注解的方法, 还是比较灵活的 我这里将扫描到的class放到map, 你可以放到其他地方,以便后期使用 import l ...
- 请简述Spring MVC的执行流程
需要面试文档可S我 今天我给大家介绍一下Spring MVC的详细执行流程.我把Spring MVC的执行流程划分为三个阶段,配置阶段.初始化阶段和运行阶段. 我整理了一张完整的执行流程图,需要高清图 ...
- 利用spring boot 写一个稳定的爬虫
1.前言 这篇文章是利用spring boot 写一个稳定的爬虫,爬取的网页数据包含未执行js的网页数据.http/https接口的请求数据.和经过网页渲染的js数据(需要chorme浏览器),数据库 ...
- 利用Spring框架封装的JavaMail实现同步或异步邮件发送
J2EE简单地讲是在JDK上扩展了各类应用的标准规范,邮件处理便是其中一个重要的应用.它既然是规范,那么我们就可以通过JDK遵照邮件协议编写一个邮件处理系统,但事实上已经有很多厂商和开源组织这样做了. ...
最新文章
- MLPerf基准测试再发榜,浪潮AI服务器刷新18项纪录
- qxidc项目/crtsurfdata程序 杀青总结
- 7. 基于策略的强化学习——蒙特卡洛策略梯度REINFORCE算法
- 【Linux】一步一步学Linux——rm命令(32)
- 04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...
- 基本的Windows相关的DOS命令
- SQL的各种使用方法
- SH760二自由度系统解析法求全解-过渡及稳态过程
- 卷积神经网络CNN算法原理
- keyboard键盘demo
- GitHub 优秀的 Android 开源项目和框架
- keil安装及mdk
- 传真服务器维护,DreamFax传真服务器
- win7桌面计算机图标变了,Win7桌面图标变成未知的文件了怎么办
- MyBatis动态SQL
- SpringCloud(三)了解了概念,现在来验证一下,玩个小案例
- 洛谷 P2916题解 【[USACO08NOV]Cheering up the Cow G】
- 风华是一指流砂,苍老了一段过往年华
- StudentLife数据集介绍
- SKU110K商品检测数据集处理