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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

spring 事件监听

發布時間:2025/7/14 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring 事件监听 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用一個簡單的例子來實現spring事件監聽的功能

?

這個例子主要功能是,記錄那些用戶是第一次登入系統,如果用戶是第一次登入系統,則調用spring的事件監聽,記錄這些用戶。

?

主要用到的spring的類和接口有:

?? org.springframework.context.event.ApplicationEvent抽象類及其子類來實現事件;

?? org.springframework.context.ApplicationListener接口及其實現者實現事件的監聽。

?? 這兩者構成了觀察者模式(Observer)。

?

?通過org.springframework.context.ApplicationContextAware接口的實現類,可以取得ApplicationContext, AlicationContext提供了publishEvent方法,實現事件的發布。

?

下面讓我們來看下實現代碼:

?

1 自定義事件 繼承ApplicationEvent抽象類

???ApplicationEvent 她繼承自java.util.EventObject,其中僅僅創建了一個構造器ApplicationEvent,和一個取得當前系統事件的timestamp

?

???public class FirstLoginUserEvent extends ApplicationEvent{

?

?????????? private?String loginName;

??

?????????? public?FirstLoginUserEvent(Object source){

??????????????? super(source);

?????????? }

?

?????????? public FirstLoginUserEvent(Object source, String loginName){

??????????????? super(source);

??????????????? this.loginName=loginName;

??????????????? System.out.println(super.getTimestamp());

??????????????? System.out.println(loginName);???????????????

?????????? }

?

?????????? public String getLoginName(){

???????????????? return loginName;

?????????? }

?

?????????? public void setLoginName(String loginName){

???????????????? this.loginName=loginName;

?????????? }

???}

?

?

?2?定義監聽器 繼承ApplicationListener接口

?

??? @Service("firstLoginUserListener ")

??? public class FirstLoginUserListener implements ApplicationListener{

?????????

?????????? private static Log log = LogFactory.getLog(FirstLoginUserListener.class);

?

???????????public void onApplicationEvent(ApplicationEvent event) {

????????????????? if (event instanceof?FirstLoginUserEvent){

???????????????????????? FirstLoginUserEvent? firstLoginUserEvent=(FirstLoginUserEvent)

???????????????????????? log.debug("用戶:"+firstLoginUserEvent.getLoginName()+"第一次登入");

??????????????????}else{

???????????????????????? log.debug("其它事件");

?????????????????? }

?????????? }?????

???? }

?

?3 發布事件

???

??? @Service("userService ")

??? public class UserService implements ApplicationContextAware {

??????????

??????????private ApplicationContext applicationContext;

?

????????? public void setApplicationContext (ApplicationContext applicationContext){

???????????????? this.applicationContext=applicationContext;

????????? }

?

??????????public void decideUser(int num,String loginName){

?????????????? if (num==0){ //用戶第一次登入,發布事件

????????????????????? applicationContext.publishEvent(new FirstLoginUserEvent(this,loginName));

?????????????? }else{

????????????????????? .......

?????????????? }

??????????}

??? }

?

當我們發布事件的時候,我們的監聽器就會對這個事件進行監聽。

在有些情況下,比如記錄某個特殊操作的日志,可以用spring的事件監聽來記錄日志,也可以用spring的AOP來做,那么它們之間有什么區別呢? spring事件監聽,是以異步方式來操作的,而AOP是同步的。這兩種方式那個好呢?就得具體情況具體分析了。

總結

以上是生活随笔為你收集整理的spring 事件监听的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。