【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 { @Override
public 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; @Override
public 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); } }
测试方式:
@Test
public void testSpringEvent() { ApplicationContext ctx = this.before(); cn.cutter.start.event.MethodExeuctionEventPublisher methodExeuctionEventPublisher = (cn.cutter.start.event.MethodExeuctionEventPublisher) ctx.getBean("methodExeuctionEventPublisher"); methodExeuctionEventPublisher.methodToMonitor(); }
操作结果:

【sping揭秘】9、容器内部事件发布(二)的更多相关文章
- 【sping揭秘】8、容器内部事件发布(一)
容器内部事件发布 Spring的applicationContext容器提供的容器内事件发布功能,是通过java提供的自定义事件实现的 事件类型:eventObject 类继承 事件监听:eventL ...
- 深入理解Spring的容器内事件发布监听机制
目录 1. 什么是事件监听机制 2. JDK中对事件监听机制的支持 2.1 基于JDK实现对任务执行结果的监听 3.Spring容器对事件监听机制的支持 3.1 基于Spring实现对任务执行结果的监 ...
- 【spring源码学习】spring的事件发布监听机制源码解析
[一]相关源代码类 (1)spring的事件发布监听机制的核心管理类:org.springframework.context.event.SimpleApplicationEventMulticast ...
- 从spring源码汲取营养:模仿spring事件发布机制,解耦业务代码
前言 最近在项目中做了一项优化,对业务代码进行解耦.我们部门做的是警用系统,通俗的说,可理解为110报警.一条警情,会先后经过接警员.处警调度员.一线警员,警情是需要记录每一步的日志,是要可追溯的,比 ...
- Spring事件发布与监听机制
我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. 目录 ...
- Nacos源码分析-事件发布机制
温馨提示: 本文内容基于个人学习Nacos 2.0.1版本代码总结而来,因个人理解差异,不保证完全正确.如有理解错误之处欢迎各位拍砖指正,相互学习:转载请注明出处. Nacos的服务注册.服务变更等功 ...
- Spring 源码(8)Spring BeanPostProcessor的注册、国际化及事件发布机制
上一篇文章https://www.cnblogs.com/redwinter/p/16198942.html介绍了Spring的注解的解析过程以及Spring Boot自动装配的原理,大概回顾下:Sp ...
- Spring之事件发布系统
springboot应用,启动spring容器大致有如下几个过程: 容器开始启动 初始化环境变量 初始化上下文 加载上下文 完成 对应的Spring应用的启动器的监听器可以监听以上的过程,接口如下: ...
- C#编程语言之委托与事件(二)—— C#事件
前面已经大致讲述了C#委托的一些基础知识点,本文接下来的内容是C#中的事件(Event),在此我提个建议,如果是刚接触C#的委托类型的朋友可以先看到这里,等熟悉了委托的使用之后(大约1-2天)再来了解 ...
随机推荐
- SpringBoot2.0.2 不使用parent作为maven单继承方式操作 : org.springframework.boot : spring-boot-dependencies : 2.0.2.RELEASE
1.pom配置方式 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
- best performance / best appearance
- android-基础编程-RecyclerView
以后android-基础编程*都是控件demo里面的,不再累赘重写.直接介绍控件使用. RecyclerView is a more advanced and flexible version of ...
- GPIO工作模式
共8种工作模式,4种输入,1.输入浮空模式2.输入上拉模式 3.输入下拉模式4.模拟输入模式 4种输出模式:开漏输出.开漏复用功能.推挽输出.推挽复用输出 ps:mos管就是场效应管,三极管有的时候也 ...
- 软工网络15团队作业4——Alpha阶段敏捷冲刺(一)
第 1 篇 Scrum 冲刺: 各个成员在 Alpha 阶段认领的任务 成员 任务 预期任务量/小时 曾艺佳 学习模块:单词及其释义 单词发音 例句学习 添加笔记 ...
- 第四章-shceme和数据类型优化
选择数据类型的原则: 1.更小通常更好.因为占用更少磁盘,内存和cpu缓存.但是要确保没有低估,因为进行alter时,是很耗时和头疼的操作.所以当无法确定数据类型的时候,选择不会超过范围的最小类型. ...
- vcpkg-微软开发的VC++打包工具
vcpkg-VC++打包工具 1. 介绍 VCPKG,是VC++ Packaging Tool. 是微软 C++ 团队开发的在 Windows 上运行的 C/C++ 项目包管理工具,可以帮助您在 Wi ...
- 马士兵hibernate(原始笔记)
马士兵hibernate(原始笔记) 课程内容 1 HelloWorld a) Xml b) annotation 2 Hibernate原理模拟 - 什么是O/R ...
- hdu 4923 单调栈
http://acm.hdu.edu.cn/showproblem.php?pid=4923 给定一个序列a,元素由0,1组成,求一个序列b,元素在0~1之间,并且保证递增.输出最小的∑(ai−bi) ...
- RxSwift学习笔记3:生命周期/订阅
有了 Observable,我们还要使用 subscribe() 方法来订阅它,接收它发出的 Event. let observal = Observable.of("a",&qu ...