日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/7/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【sping揭秘】9、容器内部事件发布(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

寫在前面----------------------------------

命運(yùn)多舛,癡迷淡然

不知下一步該往哪里走,現(xiàn)在應(yīng)該是我的迷茫期。。。

加油,快點(diǎn)走出去!!!

聰明的網(wǎng)友們,你們有沒有迷茫的時(shí)候,你們又是怎么度過的呢?

?

?

通過上面的筆記我們可以了解到spring的事件的監(jiān)聽,但是這個(gè)都是spring中定義好的,那么我們?nèi)绾巫远x事件,監(jiān)聽,以及發(fā)布呢?、

?

?

那么事件的創(chuàng)建,我們是實(shí)現(xiàn)spring的事件接口

?

Spring的事件對(duì)象

?

package cn.cutter.start.event;import org.springframework.context.ApplicationEvent;import cn.cutter.start.event.constant.MethodExecutionStatusEnum;/*** * Title: MethodExecutionEvent.java* Description: 定義一個(gè)自定義的spring事件對(duì)象* @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;/*** 構(gòu)造函數(shù)是,繼承的類實(shí)現(xiàn)的* @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;}}

?

事件的監(jiān)聽

?

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事件監(jiān)聽類型* @author xiaof* @date 2018年4月1日* @version 1.0 **/ @Component //一定要添加進(jìn)入spring的容器,才能進(jìn)行監(jiān)聽 public class MethodExecutionEventListener implements ApplicationListener {@Overridepublic void onApplicationEvent(ApplicationEvent event) {if(event instanceof MethodExecutionEvent) {MethodExecutionEvent methodExecutionEvent = (MethodExecutionEvent) event;//執(zhí)行處理邏輯System.out.println("執(zhí)行自定義事件的相應(yīng)操作");if(methodExecutionEvent.getMethodExecutionStatusEnum().equals(MethodExecutionStatusEnum.BEGIN)) {//方法開始方式System.out.println("begin 開始執(zhí)行前置事件----" + methodExecutionEvent.getMethodName());} else {System.out.println("end 開始執(zhí)行后置事件----" + methodExecutionEvent.getMethodName());}}}}

?

事件的發(fā)布對(duì)象

?

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: 這里實(shí)現(xiàn)ApplicationEventPublisherAware,方便對(duì)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() {//這個(gè)方法就是對(duì)事件的發(fā)布操作//發(fā)起開始事件并發(fā)布,發(fā)起后置事件并結(jié)束MethodExecutionEvent beginEvnt = new MethodExecutionEvent(this, "cn.cutter.start.event methodToMonitor方法觸發(fā)事件", MethodExecutionStatusEnum.BEGIN);MethodExecutionEvent endEvnt = new MethodExecutionEvent(this, "cn.cutter.start.event methodToMonitor方法觸發(fā)事件", MethodExecutionStatusEnum.END);//發(fā)布this.applicationEventPublisher.publishEvent(beginEvnt);// System.out.println("進(jìn)行 methodToMonitor 業(yè)務(wù)方法本體");//發(fā)布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();}

操作結(jié)果:

?

轉(zhuǎn)載于:https://www.cnblogs.com/cutter-point/p/8886193.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的【sping揭秘】9、容器内部事件发布(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。