在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执行自定义方法相关推荐

  1. 利用spring aop统一处理异常和打日志

    利用spring aop统一处理异常和打日志 spring aop的概念,很早就写博客介绍了,现在在工作中真正使用. 我们很容易写出的代码 我们很容易写出带有很多try catch 和 logger. ...

  2. 利用Spring框架封装的JavaMail现实同步或异步邮件发送

    利用Spring框架封装的JavaMail现实同步或异步邮件发送 作者:张纪豪 J2EE简单地讲是在JDK上扩展了各类应用的标准规范,邮件处理便是其中一个重要的应用.它既然是规范,那么我们就可以通过J ...

  3. 利用spring AOP注解实现日志管理

    最近刚接手一个项目,在项目的开始阶段,我们的架构师分配了个任务给我,让我利用spring的切面技术做一个日志管理的案例.要求很简单,就是需要记录:谁在什么时候对谁做了什么操作,同时在日志的描述中还要有 ...

  4. Spring的ApplicationEvent的使用

    Spring的ApplicationEvent的使用 Spring 3.0中提供了很多类似*Aware的类,其中ApplicationContextAware接口可以实现我们在初始化bean的时候给b ...

  5. 利用Spring的AbstractRoutingDataSource解决多数据源的读写分离问题

    背景 最近项目中为了提高数据库读写速度,想要横向扩展Oracle数据库,一个Master,多个Slave.master可以读写数据,Slave只能读数据.这就是多数据源问题了.怎么利用Spring解决 ...

  6. java 扫描自定义注解_利用spring 自定义注解扫描 找出使用自定义注解的类

    我们常常有扫描项目里带有指定注解的class, 下面是利用spring扫描自定义注解的方法, 还是比较灵活的 我这里将扫描到的class放到map, 你可以放到其他地方,以便后期使用 import l ...

  7. 请简述Spring MVC的执行流程

    需要面试文档可S我 今天我给大家介绍一下Spring MVC的详细执行流程.我把Spring MVC的执行流程划分为三个阶段,配置阶段.初始化阶段和运行阶段. 我整理了一张完整的执行流程图,需要高清图 ...

  8. 利用spring boot 写一个稳定的爬虫

    1.前言 这篇文章是利用spring boot 写一个稳定的爬虫,爬取的网页数据包含未执行js的网页数据.http/https接口的请求数据.和经过网页渲染的js数据(需要chorme浏览器),数据库 ...

  9. 利用Spring框架封装的JavaMail实现同步或异步邮件发送

    J2EE简单地讲是在JDK上扩展了各类应用的标准规范,邮件处理便是其中一个重要的应用.它既然是规范,那么我们就可以通过JDK遵照邮件协议编写一个邮件处理系统,但事实上已经有很多厂商和开源组织这样做了. ...

最新文章

  1. MLPerf基准测试再发榜,浪潮AI服务器刷新18项纪录
  2. qxidc项目/crtsurfdata程序 杀青总结
  3. 7. 基于策略的强化学习——蒙特卡洛策略梯度REINFORCE算法
  4. 【Linux】一步一步学Linux——rm命令(32)
  5. 04.React事件 方法、 React定义方法的几种方式 获取数据 改变数据 执行方法传值...
  6. 基本的Windows相关的DOS命令
  7. SQL的各种使用方法
  8. SH760二自由度系统解析法求全解-过渡及稳态过程
  9. 卷积神经网络CNN算法原理
  10. keyboard键盘demo
  11. GitHub 优秀的 Android 开源项目和框架
  12. keil安装及mdk
  13. 传真服务器维护,DreamFax传真服务器
  14. win7桌面计算机图标变了,Win7桌面图标变成未知的文件了怎么办
  15. MyBatis动态SQL
  16. SpringCloud(三)了解了概念,现在来验证一下,玩个小案例
  17. 洛谷 P2916题解 【[USACO08NOV]Cheering up the Cow G】
  18. 风华是一指流砂,苍老了一段过往年华
  19. StudentLife数据集介绍
  20. SKU110K商品检测数据集处理

热门文章

  1. Linux 利用busybox制作根文件系统
  2. 正则表达式基本语法详解
  3. MVC4实现批量更新数据
  4. Github page + octopress介绍
  5. AspxCallBack控件的CallBack事件
  6. linux存储--虚拟内存详解MMU、页表(十)
  7. HTML5表单元素禁用,禁用HTML5表单元素的验证
  8. CODING 2.0 企业级持续交付解决方案
  9. P2689 东南西北
  10. C++ 快速入门笔记:基本语法