Spring @OnApplicationEvent用法示例小結(jié)(典型用法)
典型用法
監(jiān)聽自定義事件
// 定義事件類
public class UserRegisteredEvent extends ApplicationEvent {
private final String username;
public UserRegisteredEvent(Object source, String username) {
super(source);
this.username = username;
}
public String getUsername() {
return username;
}
}
// 發(fā)布事件
@Service
public class UserService {
@Autowired
private ApplicationEventPublisher eventPublisher;
public void registerUser(String username) {
System.out.println("用戶注冊(cè):" + username);
eventPublisher.publishEvent(new UserRegisteredEvent(this, username));
}
}
// 監(jiān)聽事件
@Component
public class UserRegistrationListener {
@OnApplicationEvent
public void onUserRegistered(UserRegisteredEvent event) {
System.out.println("監(jiān)聽到用戶注冊(cè)事件:" + event.getUsername());
}
}監(jiān)聽內(nèi)置 Spring 應(yīng)用事件
Spring 內(nèi)置了一些標(biāo)準(zhǔn)事件,可以直接使用 @OnApplicationEvent 進(jìn)行監(jiān)聽。
// 監(jiān)聽?wèi)?yīng)用啟動(dòng)完成事件
@Component
public class StartupEventListener {
@OnApplicationEvent
public void onApplicationReady(ApplicationReadyEvent event) {
System.out.println("應(yīng)用已啟動(dòng)完成");
}
}異步處理事件(結(jié)合 @Async)
默認(rèn)情況下,事件監(jiān)聽是同步執(zhí)行的。若希望異步處理,可結(jié)合 @Async 注解。
@Component
public class AsyncEventListener {
@OnApplicationEvent
@Async
public void handleUserRegistered(UserRegisteredEvent event) {
System.out.println("【異步】收到用戶注冊(cè)事件:" + event.getUsername());
}
}條件過濾事件(SpEL 表達(dá)式)
可以使用 condition 屬性進(jìn)行條件判斷,僅當(dāng)滿足條件時(shí)才執(zhí)行監(jiān)聽方法。
@Component
public class ConditionalEventListener {
@OnApplicationEvent(condition = "#event.username.startsWith('admin')")
public void onAdminUserRegistered(UserRegisteredEvent event) {
System.out.println("管理員用戶注冊(cè):" + event.getUsername());
}
}多事件監(jiān)聽(泛型支持)
一個(gè)監(jiān)聽方法可以監(jiān)聽多個(gè)事件類型,只需將參數(shù)聲明為它們的共同父類或接口。
@Component
public class MultiEventLogger {
@OnApplicationEvent
public void logEvent(ApplicationEvent event) {
System.out.println("監(jiān)聽到事件:" + event.getClass().getSimpleName());
}
}到此這篇關(guān)于Spring @OnApplicationEvent用法示例小結(jié)的文章就介紹到這了,更多相關(guān)Spring @OnApplicationEvent用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springmvc處理ajax請(qǐng)求并返回json數(shù)據(jù)
這篇文章主要介紹了Springmvc處理ajax請(qǐng)求并返回json數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Java實(shí)現(xiàn)ZooKeeper的zNode監(jiān)控
這篇文章主要介紹了Java實(shí)現(xiàn)ZooKeeper的zNode監(jiān)控問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-08-08
MybatisPlus逆向工程的項(xiàng)目實(shí)踐
Mybatis-Plus逆向工程,是MP官方提供的一款代碼生成器,可以自動(dòng)生成對(duì)應(yīng)的實(shí)體類、Mapper接口和配置文件,,本文主要介紹了MybatisPlus逆向工程的項(xiàng)目實(shí)踐,感興趣的可以了解一下2024-03-03
JavaWeb實(shí)現(xiàn)文件上傳下載功能實(shí)例解析
這篇文章主要為大家詳細(xì)介紹了JavaWeb中的文件上傳和下載功能的實(shí)現(xiàn),在Web應(yīng)用系統(tǒng)開發(fā)中,文件上傳和下載功能是非常常用的功能,需要的朋友可以參考下2015-08-08

