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