【sping揭秘】9、容器内部事件发布(二)
生活随笔
收集整理的這篇文章主要介紹了
【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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 媒体洞察 | 让企业自由发展的云时代
- 下一篇: webservice服务器端获取requ