欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/7/14 编程问答 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【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

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的【sping揭秘】9、容器内部事件发布(二)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。