欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot中如何自定義監(jiān)聽器

 更新時間:2024年07月01日 16:32:53   作者:樹葉的一生啊  
這篇文章主要介紹了Springboot中自定義監(jiān)聽器,自定義事件需要繼承ApplicationEvent類,并添加一個構(gòu)造函數(shù),用于接收事件源對象,本文通過示例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

一、監(jiān)聽器模式圖

二、監(jiān)聽器三要素廣播器:

  • 廣播器:用來發(fā)布事件
  • 事件:需要被傳播的消息
  • 監(jiān)聽器:一個對象對一個事件的發(fā)生做出反應(yīng),這個對象就是事件監(jiān)聽器

三、監(jiān)聽器的實現(xiàn)方式

1、實現(xiàn)自定義事件

自定義事件需要繼承ApplicationEvent類,并添加一個構(gòu)造函數(shù),用于接收事件源對象。
該事件中添加了一個SysUser對象,用于傳遞用戶信息。

package com.ruoyi.web.listener;
import com.ruoyi.common.core.domain.entity.SysUser;
import org.springframework.context.ApplicationEvent;
/**
 * @Description: 自定義事件
 * @Author: baiwen
 * @createTime: 2024年06月19日 13:10:07
 */
public class MyEvent extends ApplicationEvent {
    private SysUser sysUser;
    public MyEvent(Object source, SysUser sysUser) {
        super(source);
        this.sysUser = sysUser;
    }
    public SysUser getSysUser() {
        return sysUser;
    }
}

2、實現(xiàn)自定義監(jiān)聽器

自定義監(jiān)聽器需要實現(xiàn)ApplicationListener接口,并重寫 onApplicationEvent方法。
接口中的泛型參數(shù)為自定義事件類型,表示監(jiān)聽該類型的事件。
可以從該事件中獲取用戶信息,并進(jìn)行相應(yīng)的處理。

package com.ruoyi.web.listener;
import com.ruoyi.common.core.domain.entity.SysUser;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
 * @Description: 自定義監(jiān)聽器
 * @Author: baiwen
 * @createTime: 2024年06月19日 13:12:39
 */
@Component
public class MyEventListener implements ApplicationListener<MyEvent> {
    @Override
    public void onApplicationEvent(MyEvent event) {
        SysUser sysUser = event.getSysUser();
        System.out.println("監(jiān)聽到了事件,用戶名:" + sysUser.getUserName());
    }
}

3、發(fā)布自定義事件

在需要發(fā)布事件的地方,使用ApplicationEventPublisher的publishEvent方法來發(fā)布事件。
這里使用Test類來模擬事件發(fā)布,實際應(yīng)用中可以根據(jù)具體需求來選擇合適的發(fā)布場景。

package com.ruoyi.test;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.web.listener.MyEvent;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
/**
 * @Description:
 * @Author: baiwen
 * @createTime: 2024年06月19日 13:16:33
 */
@SpringBootTest
@RunWith(SpringRunner.class)
public class MyEventPushTest {
    @Resource
    private ApplicationEventPublisher applicationEventPublisher;
    @Test
    public void testpublishEvent() throws InterruptedException
    {
        SysUser sysUser = new SysUser();
        sysUser.setUserName("zhangsan");
        System.out.println("發(fā)布MyEvent事件。。。");
        applicationEventPublisher.publishEvent(new MyEvent(this, sysUser));
    }
}

4、測試

運(yùn)行MyEventPushTest類中的testpublishEvent方法,控制臺會輸出以下內(nèi)容:

發(fā)布MyEvent事件。。。

監(jiān)聽到了事件,用戶名:zhangsan

5、其他實現(xiàn)方案

主要是監(jiān)聽器的注冊方式不同,目的只有一個,把監(jiān)聽器加入到spring容器中。

方式一,就是上面的MyEventListener類是通過@Component注解將該類注冊為Spring的Bean,從而實現(xiàn)監(jiān)聽器的功能。

方式二,可以通過在啟動類中添加監(jiān)聽器的方式,使監(jiān)聽器生效。

package com.ruoyi;
import com.ruoyi.web.listener.MyEventListener;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
/**
 * 啟動程序
 * 
 * @author baiwen
 */
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class RuoYiApplication
{
    public static void main(String[] args)
    {
        new SpringApplicationBuilder(RuoYiApplication.class).listeners(new MyEventListener()).run(args);
    }
}

方式三,可以通過配置spring.factories,使監(jiān)聽器生效。

在resource文件夾下創(chuàng)建META-INF/spring.factories文件。

配置內(nèi)容如下:

# 監(jiān)聽器
org.springframework.context.ApplicationListener=com.ruoyi.web.listener.MyEventListener

除此之外,還有第四種方式,通過@EventListener注解實現(xiàn)監(jiān)聽器的功能。
通過@EventListener注解的condition屬性來指定監(jiān)聽的事件類型。

package com.ruoyi.web.listener;
import com.ruoyi.common.core.domain.entity.SysUser;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
/**
 * @Description: 自定義監(jiān)聽器2
 * @Author: baiwen
 * @createTime: 2024年06月19日 14:07:57
 */
@Component
public class MyEventListener2 {
    @EventListener(MyEvent.class)
    public void listenerApplicationStarted(MyEvent event) {
        SysUser sysUser = event.getSysUser();
        System.out.println("注解方式監(jiān)聽到了事件,用戶名:" + sysUser.getUserName());
    }
}

發(fā)布事件后,可以看到能正常監(jiān)聽到事件。

發(fā)布MyEvent事件。。。
注解方式監(jiān)聽到了事件,用戶名:zhangsan

???????總結(jié)

以上,就是SpringBoot中實現(xiàn)監(jiān)聽器的四種方式。

至于監(jiān)聽器的實現(xiàn)原理,后續(xù)再補(bǔ)充。

到此這篇關(guān)于Springboot中自定義監(jiān)聽器的文章就介紹到這了,更多相關(guān)Springboot自定義監(jiān)聽器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot自定義配置項過程

    SpringBoot自定義配置項過程

    在SpringBoot項目中,通過在application.properties文件中添加配置項,然后使用@ConfigurationProperties注解將這些配置項與實體Bean進(jìn)行綁定,可以實現(xiàn)配置項與實體類字段的自動關(guān)聯(lián),進(jìn)而方便地讀取配置文件中的數(shù)據(jù),這種方法不僅簡化了配置管理
    2024-11-11
  • java基礎(chǔ)之字符串編碼知識點總結(jié)

    java基礎(chǔ)之字符串編碼知識點總結(jié)

    這篇文章主要介紹了java基礎(chǔ)之字符串編碼總結(jié),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好的幫助,要的朋友可以參考下
    2021-04-04
  • java組件smartupload實現(xiàn)上傳文件功能

    java組件smartupload實現(xiàn)上傳文件功能

    這篇文章主要為大家詳細(xì)介紹了java組件smartupload實現(xiàn)上傳文件功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • SpringBoot框架如何操作Excel和PDF

    SpringBoot框架如何操作Excel和PDF

    Excel和PDF都是常見的辦公文件類型,在實際需求中有著較多的應(yīng)用,excel經(jīng)常用來處理數(shù)據(jù),PDF文件格式可以將文字、字型、格式、顏色及獨(dú)立于設(shè)備和分辨率的圖形圖像等封裝在一個文件中,本文就講述下SpringBoot框架如何操作這兩種類型的文件
    2021-06-06
  • JAVA寶藏工具h(yuǎn)utool的使用

    JAVA寶藏工具h(yuǎn)utool的使用

    開發(fā)過程中總是會遇到需要自己自定義工具類的情況,做一些數(shù)據(jù)轉(zhuǎn)換、字符串操作、日期處理、加解密、編解碼、金額計算等,本文就詳細(xì)的介紹有一個工具類hutool的使用,感興趣的可以了解一下
    2021-10-10
  • SpringBoot配置logback.xml 多環(huán)境的操作步驟

    SpringBoot配置logback.xml 多環(huán)境的操作步驟

    最近在研究springboot的日志,所以記錄一下,做一下總結(jié),今天重點給大家介紹SpringBoot配置logback.xml 多環(huán)境的操作步驟,要實現(xiàn)多環(huán)境的配置,主要是依賴于springboot的application.yml文件去實現(xiàn),感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • java搭建ftp/sftp進(jìn)行數(shù)據(jù)傳遞的全過程

    java搭建ftp/sftp進(jìn)行數(shù)據(jù)傳遞的全過程

    ftp是一種文件傳輸協(xié)議,讓客戶端和服務(wù)端能夠互相傳遞文件,圖片等數(shù)據(jù),sftp也是一種文件傳輸協(xié)議,但是相比較而言要比ftp安全性更好些,但是也有缺點就是傳輸效率低
    2021-07-07
  • MyBatis中association的基本使用方法

    MyBatis中association的基本使用方法

    在項目中某些實體類之間肯定有關(guān)鍵關(guān)系,比如一對一,一對多等,在hibernate中用one to one和one to many,而mybatis中就用association和collection,下面這篇文章主要給大家介紹了關(guān)于MyBatis中association基本使用方法的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • Springboot引入hibernate配置自動建表并進(jìn)行增刪改查操作

    Springboot引入hibernate配置自動建表并進(jìn)行增刪改查操作

    這篇文章主要介紹了Springboot引入hibernate配置自動建表并進(jìn)行增刪改查,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • java自定義填充excel并導(dǎo)出的方法代碼實例

    java自定義填充excel并導(dǎo)出的方法代碼實例

    這篇文章主要給大家介紹了關(guān)于java自定義填充excel并導(dǎo)出的相關(guān)資料,使用Java在Spring框架中實現(xiàn)一個接口,該接口可以將JSON數(shù)據(jù)導(dǎo)出為Excel文件,文章涵蓋了從加載Excel模板、創(chuàng)建單元格樣式到填充數(shù)據(jù)并返回響應(yīng)的整個過程,需要的朋友可以參考下
    2024-12-12

最新評論