【sping揭秘】9、容器内部事件发布(二)
写在前面----------------------------------
命运多舛,痴迷淡然
不知下一步该往哪里走,现在应该是我的迷茫期。。。
加油,快点走出去!!!
聪明的网友们,你们有没有迷茫的时候,你们又是怎么度过的呢?
通过上面的笔记我们可以了解到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、容器内部事件发布(二)相关推荐
- 深入理解Spring的容器内事件发布监听机制
前言 Spring 提供了 ApplicationContext 事件机制,可以发布和监听事件,这个特性非常有用. Spring 内置了一些事件和监听器,例如在 Spring 容器启动前,Spring ...
- 【转载】SpringBoot 事件发布监听机制使用
前言 这一篇从应用角度来跟大伙讲讲 这个 spring 事件监听机制 ,顺便涉及到那些我认为大家应该一块了解的,我也会展开说说. 文章内容(包括不限于) : 1. 对比观察者模式 2. 应用场景的分析 ...
- docker 启动容器_crontab入门二:定时启动docker容器并启动容器内部脚本
在寻梦:crontab入门一:crontab定时启动docker容器里面详细的描述了关于如果利用crontab重启docker容器,如果不太熟悉的同学麻烦先去看 寻梦:crontab入门一:cront ...
- docker 容器内部获取自身id_crontab入门二:定时启动docker容器并启动容器内部脚本...
在寻梦:crontab入门一:crontab定时启动docker容器里面详细的描述了关于如果利用crontab重启docker容器,如果不太熟悉的同学麻烦先去看 寻梦:crontab入门一:cront ...
- Spring的事件发布机制
一:Spring的事件发布 ApplicationContext提供了针对Bean的事件传播功能,其中的主角是publishEvent()方法,通过这个方法可以将事件通知给系统内的监听器(需实现App ...
- Spring IoC 源码系列(三)Spring 事件发布机制原理分析
在 IoC 容器启动流程中有一个 finishRefresh 方法,具体实现如下: protected void finishRefresh() {clearResourceCaches();init ...
- Spring —— 容器内部逻辑
引言 上一篇关于IoC容器的详解<Spring -- IoC 容器详解>真是工程浩大,可以说Spring官网对核心中的核心IOC容器做了非常全面的使用说明,包括在<Spring揭秘& ...
- Spring事件发布机制
目录 前言 一.事件驱动机制 二.Spring的事件发布机制 三.Spring事件使用实例 四.Spring事件驱动的实现原理 总结: 前言 在设计模式中有一种设计模式叫做观察者设计模式,观察者模式的 ...
- Spring Boot使用ApplicationEvent来实现事件发布订阅功能(美女一个都不能少,都要通知到) - 第420篇
历史文章(累计400+篇文章) <国内最全的Spring Boot系列之一> <国内最全的Spring Boot系列之二> <国内最全的Spring Boot系列之三&g ...
最新文章
- 360金融首席科学家张家兴:只靠AI Lab做不好AI中台 | 独家专访
- 【ExtJS】 布局Layout
- redis as session_handler
- 深入理解重要的编程模型
- hmc如何进入aix系统_linux系统中如何进入退出vim编辑器,方法及区别
- 多行省略号不显示的问题
- JNI 概述 (翻译)
- Redis 对象系统
- 获取上周第一天,最后一天
- 虚拟机安装win10提示operating system not found
- 计算机网络_实验5_集线器与交换机对比
- 闲情雅致-(诗词篇1)
- 使用JavaReport制作Web报表与图形 入门示例
- p 值的意义是什么?终于有人讲明白了
- 【python】获取当前时间(年月日时分秒)
- R语言之读取Excel及csv数据
- oracle 查询数据的结果集导出
- python 输入一个数,判断是不是水仙花数
- 张艾迪(创始人):世界最高级文明信仰
- ctf-crypto-7+1+0