写在前面----------------------------------

命运多舛,痴迷淡然

不知下一步该往哪里走,现在应该是我的迷茫期。。。

加油,快点走出去!!!

聪明的网友们,你们有没有迷茫的时候,你们又是怎么度过的呢?

通过上面的笔记我们可以了解到spring的事件的监听,但是这个都是spring中定义好的,那么我们如何自定义事件,监听,以及发布呢?、

那么事件的创建,我们是实现spring的事件接口

Spring的事件对象

package cn.cutter.start.event;import org.springframework.context.ApplicationEvent;import cn.cutter.start.event.constant.MethodExecutionStatusEnum;/*** * Title: MethodExecutionEvent.java* Description: 定义一个自定义的spring事件对象* @author xiaof* @date 2018年3月28日* @version 1.0 **/
public class MethodExecutionEvent extends ApplicationEvent {/*** */private static final long serialVersionUID = 2211772210416245698L;private String methodName;private MethodExecutionStatusEnum methodExecutionStatusEnum;/*** 构造函数是,继承的类实现的* @param source*/public MethodExecutionEvent(Object source) {super(source);}public MethodExecutionEvent(Object source, String methodName, MethodExecutionStatusEnum methodExecutionStatusEnum) {super(source);this.methodName = methodName;this.methodExecutionStatusEnum = methodExecutionStatusEnum;}public String getMethodName() {return methodName;}public void setMethodName(String methodName) {this.methodName = methodName;}public MethodExecutionStatusEnum getMethodExecutionStatusEnum() {return methodExecutionStatusEnum;}public void setMethodExecutionStatusEnum(MethodExecutionStatusEnum methodExecutionStatusEnum) {this.methodExecutionStatusEnum = methodExecutionStatusEnum;}}

事件的监听

package cn.cutter.start.event;import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;import cn.cutter.start.event.constant.MethodExecutionStatusEnum;/*** * Title: MethodExecutionEventListener.java* Description: spring事件监听类型* @author xiaof* @date 2018年4月1日* @version 1.0 **/
@Component  //一定要添加进入spring的容器,才能进行监听
public class MethodExecutionEventListener implements ApplicationListener {@Overridepublic void onApplicationEvent(ApplicationEvent event) {if(event instanceof MethodExecutionEvent) {MethodExecutionEvent methodExecutionEvent = (MethodExecutionEvent) event;//执行处理逻辑System.out.println("执行自定义事件的相应操作");if(methodExecutionEvent.getMethodExecutionStatusEnum().equals(MethodExecutionStatusEnum.BEGIN)) {//方法开始方式System.out.println("begin 开始执行前置事件----" + methodExecutionEvent.getMethodName());} else {System.out.println("end  开始执行后置事件----" + methodExecutionEvent.getMethodName());}}}}

事件的发布对象

package cn.cutter.start.event;import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Component;import cn.cutter.start.event.constant.MethodExecutionStatusEnum;/*** * Title: MethodExeuctionEventPublisher.java* Description: 这里实现ApplicationEventPublisherAware,方便对applicationEventPublisher的注入* @author xiaof* @date 2018年4月1日* @version 1.0 **/
@Component
public class MethodExeuctionEventPublisher implements ApplicationEventPublisherAware {private ApplicationEventPublisher applicationEventPublisher;@Overridepublic void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {this.applicationEventPublisher = applicationEventPublisher;}public void methodToMonitor() {//这个方法就是对事件的发布操作//发起开始事件并发布,发起后置事件并结束MethodExecutionEvent beginEvnt = new MethodExecutionEvent(this, "cn.cutter.start.event methodToMonitor方法触发事件", MethodExecutionStatusEnum.BEGIN);MethodExecutionEvent endEvnt = new MethodExecutionEvent(this, "cn.cutter.start.event methodToMonitor方法触发事件", MethodExecutionStatusEnum.END);//发布this.applicationEventPublisher.publishEvent(beginEvnt);//
        System.out.println("进行 methodToMonitor 业务方法本体");//发布this.applicationEventPublisher.publishEvent(endEvnt);}}

测试方式:

@Testpublic void testSpringEvent() {ApplicationContext ctx = this.before();cn.cutter.start.event.MethodExeuctionEventPublisher methodExeuctionEventPublisher = (cn.cutter.start.event.MethodExeuctionEventPublisher) ctx.getBean("methodExeuctionEventPublisher");methodExeuctionEventPublisher.methodToMonitor();}

操作结果:

转载于:https://www.cnblogs.com/cutter-point/p/8886193.html

【sping揭秘】9、容器内部事件发布(二)相关推荐

  1. 深入理解Spring的容器内事件发布监听机制

    前言 Spring 提供了 ApplicationContext 事件机制,可以发布和监听事件,这个特性非常有用. Spring 内置了一些事件和监听器,例如在 Spring 容器启动前,Spring ...

  2. 【转载】SpringBoot 事件发布监听机制使用

    前言 这一篇从应用角度来跟大伙讲讲 这个 spring 事件监听机制 ,顺便涉及到那些我认为大家应该一块了解的,我也会展开说说. 文章内容(包括不限于) : 1. 对比观察者模式 2. 应用场景的分析 ...

  3. docker 启动容器_crontab入门二:定时启动docker容器并启动容器内部脚本

    在寻梦:crontab入门一:crontab定时启动docker容器里面详细的描述了关于如果利用crontab重启docker容器,如果不太熟悉的同学麻烦先去看 寻梦:crontab入门一:cront ...

  4. docker 容器内部获取自身id_crontab入门二:定时启动docker容器并启动容器内部脚本...

    在寻梦:crontab入门一:crontab定时启动docker容器里面详细的描述了关于如果利用crontab重启docker容器,如果不太熟悉的同学麻烦先去看 寻梦:crontab入门一:cront ...

  5. Spring的事件发布机制

    一:Spring的事件发布 ApplicationContext提供了针对Bean的事件传播功能,其中的主角是publishEvent()方法,通过这个方法可以将事件通知给系统内的监听器(需实现App ...

  6. Spring IoC 源码系列(三)Spring 事件发布机制原理分析

    在 IoC 容器启动流程中有一个 finishRefresh 方法,具体实现如下: protected void finishRefresh() {clearResourceCaches();init ...

  7. Spring —— 容器内部逻辑

    引言 上一篇关于IoC容器的详解<Spring -- IoC 容器详解>真是工程浩大,可以说Spring官网对核心中的核心IOC容器做了非常全面的使用说明,包括在<Spring揭秘& ...

  8. Spring事件发布机制

    目录 前言 一.事件驱动机制 二.Spring的事件发布机制 三.Spring事件使用实例 四.Spring事件驱动的实现原理 总结: 前言 在设计模式中有一种设计模式叫做观察者设计模式,观察者模式的 ...

  9. Spring Boot使用ApplicationEvent来实现事件发布订阅功能(美女一个都不能少,都要通知到) - 第420篇

    历史文章(累计400+篇文章) <国内最全的Spring Boot系列之一> <国内最全的Spring Boot系列之二> <国内最全的Spring Boot系列之三&g ...

最新文章

  1. 360金融首席科学家张家兴:只靠AI Lab做不好AI中台 | 独家专访
  2. 【ExtJS】 布局Layout
  3. redis as session_handler
  4. 深入理解重要的编程模型
  5. hmc如何进入aix系统_linux系统中如何进入退出vim编辑器,方法及区别
  6. 多行省略号不显示的问题
  7. JNI 概述 (翻译)
  8. Redis 对象系统
  9. 获取上周第一天,最后一天
  10. 虚拟机安装win10提示operating system not found
  11. 计算机网络_实验5_集线器与交换机对比
  12. 闲情雅致-(诗词篇1)
  13. 使用JavaReport制作Web报表与图形 入门示例
  14. p 值的意义是什么?终于有人讲明白了
  15. 【python】获取当前时间(年月日时分秒)
  16. R语言之读取Excel及csv数据
  17. oracle 查询数据的结果集导出
  18. python 输入一个数,判断是不是水仙花数
  19. 张艾迪(创始人):世界最高级文明信仰
  20. ctf-crypto-7+1+0

热门文章

  1. 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)
  2. dataGridView1去掉第一列
  3. 一步一步SharePoint 2007之二十三:编写一个最简单的WebPart(1)——创建工程
  4. 自己实现一个最简单的数据库
  5. 使用ASM进行人脸相关识别的预处理
  6. iOS/OS X内存管理(一):基本概念与原理
  7. Visual Paradigm 教程[UML]:如何在序列图中使用持续时间约束?
  8. 鲁迅先生就ERP实施问题答记者问
  9. Linux网络相关知识
  10. 粗选公式-通达信(东方财富网)