亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring中的事件監(jiān)聽(tīng)器使用學(xué)習(xí)記錄

 更新時(shí)間:2024年07月12日 10:11:35   作者:太自由  
Spring框架中的事件監(jiān)聽(tīng)機(jī)制是一種設(shè)計(jì)模式,它允許你定義和觸發(fā)事件,同時(shí)允許其他組件監(jiān)聽(tīng)這些事件并在事件發(fā)生時(shí)作出響應(yīng),這篇文章主要介紹了Spring中的事件監(jiān)聽(tīng)器使用學(xué)習(xí),需要的朋友可以參考下

一、什么是Spring中的事件監(jiān)聽(tīng)機(jī)制?

        Spring框架中的事件監(jiān)聽(tīng)機(jī)制是一種設(shè)計(jì)模式,它允許你定義和觸發(fā)事件,同時(shí)允許其他組件監(jiān)聽(tīng)這些事件并在事件發(fā)生時(shí)作出響應(yīng)。這種機(jī)制基于觀察者模式,提供了一種松耦合的方式來(lái)實(shí)現(xiàn)組件間的通信。

二、Spring事件監(jiān)聽(tīng)機(jī)制的關(guān)鍵概念        

1. 事件(Event)

        事件是應(yīng)用程序中的一個(gè)信號(hào),表明某個(gè)動(dòng)作已經(jīng)發(fā)生或某個(gè)條件已經(jīng)滿足。在Spring中,事件通常是實(shí)現(xiàn)ApplicationEvent接口的類來(lái)表示的。Spring為我們提供了多種內(nèi)置的事件類型,如ContextStartedEvent、ContextRefreshedEvent,ContextCloseEvent、ContextStoppedEvent等事件,分別對(duì)應(yīng)于應(yīng)用程序上下文的不同生命周期階段。當(dāng)然我們也可以自定義自己的事件類型,即:通過(guò)實(shí)現(xiàn)ApplicationEvent接口或擴(kuò)展ApplicationEvent類。

2. 事件發(fā)布者(Event Publisher)

        事件發(fā)布者負(fù)責(zé)將事件發(fā)布出去,然后通過(guò)Spring的智能事件派發(fā),把發(fā)布的事件派發(fā)給對(duì)應(yīng)該事件類型的所有監(jiān)聽(tīng)器。在Spring中,ApplicationContext自身就是一個(gè)事件發(fā)布者(因?yàn)锳pplicationContext接口繼承了ApplicationEventPublisher接口),它可以發(fā)布應(yīng)用程序事件(比如ContextRefreshedEvent ,ContextCloseEvent等事件)?!就ǔN覀儠?huì)讓自定義組件實(shí)現(xiàn) ApplicationEventPublisherAware接口,然后實(shí)現(xiàn)接口中的如下方法把事件發(fā)布者對(duì)象注入到組件中】

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher;
    }

3. 事件監(jiān)聽(tīng)器(Event Listener)

        事件監(jiān)聽(tīng)器是實(shí)現(xiàn)ApplicationListener接口的組件,它們可以監(jiān)聽(tīng)和響應(yīng)事件。監(jiān)聽(tīng)器需要實(shí)現(xiàn)onApplicationEvent方法,以便在接收到事件時(shí)進(jìn)行處理。此外,Spring給我們提供了一個(gè) @EventListener注解,允許你直接在方法上標(biāo)注以監(jiān)聽(tīng)特定類型的事件。當(dāng)事件發(fā)生時(shí),Spring會(huì)自動(dòng)調(diào)用這些方法。(注意:事件監(jiān)聽(tīng)器一定要放入IOC容器中才會(huì)生效。)

4. 事件傳播

        事件可以在不同的Spring容器之間傳播,例如從子容器傳播到父容器。

5. 同步與異步事件

        Spring支持同步和異步事件處理。

三、實(shí)現(xiàn)一個(gè)簡(jiǎn)單的事件監(jiān)聽(tīng)功能

        需求描述: 程序中有一個(gè)添加用戶的業(yè)務(wù)組件,要求當(dāng)用戶添加成功時(shí),發(fā)布一個(gè)添加用戶成功事件,然后通過(guò)添加用戶成功事件的監(jiān)聽(tīng)器給管理員發(fā)送一封郵件。

1. 業(yè)務(wù)組件

package com.shg.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.shg.beans.User;
public interface UserService extends IService<User> {
    User addUser(User user);
}
        
package com.shg.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.shg.beans.User;
import com.shg.listener.event.UserAddSuccessEvent;
import com.shg.mapper.UserMapper;
import com.shg.service.UserService;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService, ApplicationEventPublisherAware {
    private ApplicationEventPublisher applicationEventPublisher;
    private final UserMapper userMapper;
    public UserServiceImpl(UserMapper userMapper) {
        this.userMapper = userMapper;
    }
    @Override
    public User addUser(User user) {
        userMapper.insert(user);
        applicationEventPublisher.publishEvent(new UserAddSuccessEvent(this, user));
        return user;
    }
    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
        this.applicationEventPublisher = applicationEventPublisher;
    }
}

2. 添加用戶成功事件

package com.shg.listener.event;
import com.shg.beans.User;
import org.springframework.context.ApplicationEvent;
public class UserAddSuccessEvent extends ApplicationEvent {
    private final User user;
    public UserAddSuccessEvent(Object source, User user) {
        super(source);
        this.user = user;
    }
    public User getUser() {
        return user;
    }
}

3. 添加用戶成功事件監(jiān)聽(tīng)器

package com.shg.listener;
import com.shg.listener.event.UserAddFailEvent;
import com.shg.listener.event.UserAddSuccessEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
// 實(shí)現(xiàn)ApplicationListener接口的方式
// @Slf4j
// @Component
// public class UserAddListener implements ApplicationListener<UserAddSuccessEvent> {
//     @Override
//     public void onApplicationEvent(UserAddSuccessEvent event) {
//         log.info("創(chuàng)建用戶:{}, 成功,已發(fā)送短信給管理員...", event.getUser());
//     }
// }
// 使用@EventListener的方式
@Slf4j
@Component
public class UserAddListener {
    @EventListener(value = {UserAddSuccessEvent.class})
    public void listenerUserAddSuccessEvent(UserAddSuccessEvent event) {
        log.info("創(chuàng)建用戶:{}, 成功,已發(fā)送短信給管理員...", event.getUser());
    }
}

4. 運(yùn)行結(jié)果

到此這篇關(guān)于Spring中的事件監(jiān)聽(tīng)器使用學(xué)習(xí)的文章就介紹到這了,更多相關(guān)Spring事件監(jiān)聽(tīng)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解java實(shí)現(xiàn)簡(jiǎn)單掃碼登錄功能(模仿微信網(wǎng)頁(yè)版掃碼)

    詳解java實(shí)現(xiàn)簡(jiǎn)單掃碼登錄功能(模仿微信網(wǎng)頁(yè)版掃碼)

    這篇文章主要介紹了java實(shí)現(xiàn)簡(jiǎn)單掃碼登錄功能(模仿微信網(wǎng)頁(yè)版掃碼),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • java正則表達(dá)式處理花括號(hào)內(nèi)容替換賦值問(wèn)題

    java正則表達(dá)式處理花括號(hào)內(nèi)容替換賦值問(wèn)題

    這篇文章主要介紹了java正則表達(dá)式處理花括號(hào)內(nèi)容替換賦值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • ?基于Java解決華為機(jī)試之字符串合并處理實(shí)操

    ?基于Java解決華為機(jī)試之字符串合并處理實(shí)操

    這篇文章主要介紹了基于Java解決華為機(jī)試之字符串合并處理,文章以實(shí)操展開(kāi)主題內(nèi)容,具有一的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)工作中的你有所幫助
    2022-02-02
  • 詳解Java語(yǔ)言中的抽象類與繼承

    詳解Java語(yǔ)言中的抽象類與繼承

    這篇文章主要為大家詳細(xì)介紹了Java語(yǔ)言中的抽象類與繼承的相關(guān)資料,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,感興趣的小伙伴快跟隨小編一起了解一下
    2022-10-10
  • idea中Tomcat啟動(dòng)失敗的解決

    idea中Tomcat啟動(dòng)失敗的解決

    這篇文章主要介紹了idea中Tomcat啟動(dòng)失敗的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • 簡(jiǎn)單解析java方法在調(diào)用在內(nèi)存中的執(zhí)行過(guò)程

    簡(jiǎn)單解析java方法在調(diào)用在內(nèi)存中的執(zhí)行過(guò)程

    這篇文章主要介紹了簡(jiǎn)單解析java方法在調(diào)用在內(nèi)存中的執(zhí)行過(guò)程,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • Springboot整合Shiro實(shí)現(xiàn)登錄與權(quán)限校驗(yàn)詳細(xì)解讀

    Springboot整合Shiro實(shí)現(xiàn)登錄與權(quán)限校驗(yàn)詳細(xì)解讀

    本文給大家介紹Springboot整合Shiro的基本使用,Apache?Shiro是Java的一個(gè)安全框架,Shiro本身無(wú)法知道所持有令牌的用戶是否合法,我們將整合Shiro實(shí)現(xiàn)登錄與權(quán)限的驗(yàn)證
    2022-04-04
  • SpringBoot項(xiàng)目Jar包如何瘦身部署的實(shí)現(xiàn)

    SpringBoot項(xiàng)目Jar包如何瘦身部署的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot項(xiàng)目Jar包如何瘦身部署的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 詳解java配置文件的路徑問(wèn)題

    詳解java配置文件的路徑問(wèn)題

    這篇文章主要介紹了詳解java配置文件的路徑問(wèn)題的相關(guān)資料,這里對(duì)絕對(duì)路徑及相對(duì)路徑和classpath 類文件路徑進(jìn)行詳細(xì)介紹,需要的朋友可以參考下
    2017-07-07
  • Java9的一些新特性介紹

    Java9的一些新特性介紹

    這篇文章主要介紹了Java9的一些新特性介紹,Java隨著其開(kāi)源的特點(diǎn)和甲骨文的推動(dòng)正在不斷改進(jìn)中,需要的朋友可以參考下
    2015-07-07

最新評(píng)論