国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot 監(jiān)聽(tīng)器

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot 監(jiān)聽(tīng)器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

介紹

Spring的監(jiān)聽(tīng)器也可以說(shuō)是一種觀察者模式,它能實(shí)現(xiàn)事件與事件監(jiān)聽(tīng)者直接的解耦,在Spring中監(jiān)聽(tīng)器的實(shí)現(xiàn)主要有一下重要組件:

  • ApplicationListener:事件監(jiān)聽(tīng)者,觀察者;
  • ApplicationEvent:Spring 事件,記錄事件源、事件內(nèi)容、時(shí)間等數(shù)據(jù);
  • 有些場(chǎng)景事件主體主要是String或基本類(lèi)型,4.2版本之后,不再?gòu)?qiáng)制要求繼承ApplicationEvent,非ApplicationEvent子類(lèi)的對(duì)象將被包裝成PayloadApplicationEvent
  • @EventListener:除了實(shí)現(xiàn)ApplicationListener接口注冊(cè)監(jiān)聽(tīng)器,也可以使用注解的方式
  • ApplicationEventPublisher:發(fā)布事件;

事件監(jiān)聽(tīng)4種方式

springboot進(jìn)行事件監(jiān)聽(tīng)有四種方式:

  1. 手工向ApplicationContext中添加監(jiān)聽(tīng)器
  2. 使用注解將監(jiān)聽(tīng)器裝載入spring容器
  3. 在application.properties中配置監(jiān)聽(tīng)器
  4. 通過(guò)@EventListener注解實(shí)現(xiàn)事件監(jiān)聽(tīng)

講到事件監(jiān)聽(tīng),這里我們說(shuō)下自定義事件和自定義監(jiān)聽(tīng)器類(lèi)的實(shí)現(xiàn)方式:

  • 自定義事件:繼承自ApplicationEvent抽象類(lèi),然后定義自己的構(gòu)造器

  • 自定義監(jiān)聽(tīng):實(shí)現(xiàn)ApplicationListener<T>接口,然后實(shí)現(xiàn)onApplicationEvent方法。注意:該接口的實(shí)現(xiàn)類(lèi)必須放到IOC容器中,否者不會(huì)起作用。

自定義事件

import org.springframework.context.ApplicationEvent;

/**
 * created at 2023/4/18 10:43
 *
 * @author somnuszpli
 */
public class MyEvent extends ApplicationEvent {

    private Long id;

    private String name;

    public MyEvent(Long id, String name) {
        super(id);
        this.name = name;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

發(fā)布事件

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;

/**
 * created at 2023/4/18 10:52
 *
 * @author somnuszpli
 */
@Component
public class MyEventPublisher {

    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

    public void publishEvent(Long id, String name) {
        MyEvent event = new MyEvent(id,name);
        applicationEventPublisher.publishEvent(event);
    }
}

1. 手工向ApplicationContext中添加監(jiān)聽(tīng)器

首先創(chuàng)建MyListener1類(lèi)

public class MyListener1 implements ApplicationListener<MyEvent>{
	Logger logger = Logger.getLogger(MyListener1.class);
	
	public void onApplicationEvent(MyEvent event){
		logger.info(String.format("%s監(jiān)聽(tīng)到事件源:%s.", MyListener1.class.getName(), event.getSource()));
	}
}

然后在springboot應(yīng)用啟動(dòng)類(lèi)中獲取ConfigurableApplicationContext上下文,裝載監(jiān)聽(tīng)

@SpringBootApplication
public class LisenterApplication{
	public static void main(String[] args){
		ConfigurableApplicationContext context = SpringApplication.run(LisenterApplication.class, args);
		//裝載監(jiān)聽(tīng)
		context.addApplicationListener(new MyListener1());
	}
}

2. 使用注解將監(jiān)聽(tīng)器裝載入spring容器

創(chuàng)建MyListener2類(lèi),并使用@Component注解將該類(lèi)裝載入spring容器中

@Component
public class MyListener2 implements ApplicationListener<MyEvent>{
	Logger logger = Logger.getLogger(MyListener2.class);
	
	public void onApplicationEvent(MyEvent event){
		logger.info(String.format("%s監(jiān)聽(tīng)到事件源:%s.", MyListener2.class.getName(), event.getSource()));
	}
}

3. 在application.properties中配置監(jiān)聽(tīng)器

首先創(chuàng)建MyListener3類(lèi)

public class MyListener3 implements ApplicationListener<MyEvent>{
	Logger logger = Logger.getLogger(MyListener3.class);
	
	public void onApplicationEvent(MyEvent event){
		logger.info(String.format("%s監(jiān)聽(tīng)到事件源:%s.", MyListener3.class.getName(), event.getSource()));
	}
}

然后在application.properties中配置監(jiān)聽(tīng)

context.listener.classes=com.listener.MyListener3

4. 通過(guò)@EventListener注解實(shí)現(xiàn)事件監(jiān)聽(tīng)

創(chuàng)建MyListener4類(lèi),該類(lèi)無(wú)需實(shí)現(xiàn)ApplicationListener接口,使用@EventListener裝飾具體方法

@Component
public class MyListener4{
	Logger logger = Logger.getLogger(MyListener4.class);
	
  // @EventListener 注解支持根據(jù)Event參數(shù)類(lèi)型進(jìn)行匹配
	@EventListener
	public void listener(MyEvent event){
		logger.info(String.format("%s監(jiān)聽(tīng)到事件源:%s.", MyListener4.class.getName(), event.getSource()));
	}
}

PayloadApplicationEvent

有些時(shí)候我們事件傳遞的對(duì)象是一些簡(jiǎn)單的對(duì)象,比如一個(gè)字符串,不想繼承ApplicationEvent對(duì)象,可以使用PayloadApplicationEvent

@Component
public class PayloadApplicationListener implements ApplicationListener<PayloadApplicationEvent<String>> {

    @Override
    public void onApplicationEvent(PayloadApplicationEvent<String> event) {
        System.out.println(event.getPayload());
    }
}
    public static void main(String[] args) {
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);

        //applicationContext.publishEvent(new InitializePost(applicationContext, "Y"));
        applicationContext.publishEvent("hello world");
        //applicationContext.publishEvent(new C());
    }

運(yùn)行結(jié)果文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-485096.html

hello world

到了這里,關(guān)于SpringBoot 監(jiān)聽(tīng)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring高手之路15——掌握Spring事件監(jiān)聽(tīng)器的內(nèi)部邏輯與實(shí)現(xiàn)

    Spring高手之路15——掌握Spring事件監(jiān)聽(tīng)器的內(nèi)部邏輯與實(shí)現(xiàn)

    在閱讀本文之前需要你已經(jīng)對(duì)事件監(jiān)聽(tīng)器有了簡(jiǎn)單的了解,或去閱讀前面的文章《 Spring高手之路7——事件機(jī)制與監(jiān)聽(tīng)器的全面探索 》 ??在 Spring 中, ApplicationContext 可以形成一個(gè)層次結(jié)構(gòu),通常由主容器和多個(gè)子容器組成。一個(gè)常見(jiàn)的疑問(wèn)是:當(dāng)一個(gè)事件在其中一個(gè)容器

    2024年02月06日
    瀏覽(28)
  • Spring監(jiān)聽(tīng)器用法與原理詳解(帶ApplicationListener模型圖)

    Spring監(jiān)聽(tīng)器用法與原理詳解(帶ApplicationListener模型圖)

    相信大家都或多或少知道Spring中的監(jiān)聽(tīng)器,有些人還能說(shuō)出它采用了 觀察者模式 ,但其實(shí)它還用到了 適配器模式 , 工廠模式 等。當(dāng)然,仍有不少人是完全不了解Spring的監(jiān)聽(tīng)及其機(jī)制的,本次我們就來(lái)深入學(xué)習(xí)一下 Spring監(jiān)聽(tīng)器 Spring監(jiān)聽(tīng)器是一種 特殊的類(lèi),它們能幫助開(kāi)發(fā)

    2024年02月06日
    瀏覽(31)
  • Spring高手之路7——事件機(jī)制與監(jiān)聽(tīng)器的全面探索

    Spring高手之路7——事件機(jī)制與監(jiān)聽(tīng)器的全面探索

    ??觀察者模式是一種行為設(shè)計(jì)模式,它定義了對(duì)象之間的依賴(lài)關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴(lài)于它的對(duì)象都會(huì)得到通知并被自動(dòng)更新。在這個(gè)模式中,改變狀態(tài)的對(duì)象被稱(chēng)為主題,依賴(lài)的對(duì)象被稱(chēng)為觀察者。 舉個(gè)實(shí)際的例子: 事件源(Event Source) :可以視

    2024年02月11日
    瀏覽(25)
  • Springboot中使用攔截器、過(guò)濾器、監(jiān)聽(tīng)器

    Springboot中使用攔截器、過(guò)濾器、監(jiān)聽(tīng)器

    Javaweb三大組件:servlet、Filter(過(guò)濾器)、?Listener(監(jiān)聽(tīng)器) SpringBoot特有組件:Interceptor(攔截器) 過(guò)濾器、攔截器、監(jiān)聽(tīng)器、AOP(后續(xù)文章介紹)、全局異常處理器(后續(xù)文章介紹)是搭建系統(tǒng)框架時(shí),經(jīng)常用到的部分,全局異常處理器的作用很明顯,就是處理接口執(zhí)行

    2024年02月03日
    瀏覽(25)
  • springboot監(jiān)聽(tīng)器的使用(ApplicationListener、SmartApplicationListener、@EventListener)

    springboot監(jiān)聽(tīng)器的使用(ApplicationListener、SmartApplicationListener、@EventListener)

    監(jiān)聽(tīng)器: 當(dāng)某個(gè)事件觸發(fā)的時(shí)候,就會(huì)執(zhí)行的方法塊。 springboot提供了兩個(gè)接口來(lái)實(shí)現(xiàn)監(jiān)聽(tīng): ApplicationListener 、 SmartApplicationListener ,如下圖。顯而易見(jiàn), SmartApplicationListener 是 ApplicationListener 的子類(lèi),故而其功能要強(qiáng)于 ApplicationListener 。 當(dāng)然,springboot很貼心地提供了一個(gè)

    2024年01月15日
    瀏覽(19)
  • Flutter中的AppLifecycleListener:應(yīng)用生命周期監(jiān)聽(tīng)器介紹及使用

    引言 當(dāng)你在Flutter中需要監(jiān)聽(tīng)?wèi)?yīng)用程序的生命周期變化時(shí),可以使用 AppLifecycleListener 。在Flutter 3.13中, AppLifecycleListener 被添加到Framework中,用于監(jiān)聽(tīng)?wèi)?yīng)用程序的生命周期變化,并響應(yīng)退出應(yīng)用程序的請(qǐng)求等支持。 在Flutter 3.13之前,我們通常使用 WidgetsBindingObserver 的 didChange

    2024年01月20日
    瀏覽(25)
  • Spring項(xiàng)目配置文件中RabbitMQ監(jiān)聽(tīng)器各個(gè)參數(shù)的作用

    spring.rabbitmq.listener.simple.concurrency :設(shè)置監(jiān)聽(tīng)器容器的并發(fā)消費(fèi)者數(shù)量,默認(rèn)為1,即單線程消費(fèi)。 spring.rabbitmq.listener.simple.max-concurrency :設(shè)置監(jiān)聽(tīng)器容器的最大并發(fā)消費(fèi)者數(shù)量。 spring.rabbitmq.listener.simple.prefetch :設(shè)置每個(gè)消費(fèi)者從RabbitMQ服務(wù)器獲取的消息數(shù)量,即每次從隊(duì)列

    2024年02月16日
    瀏覽(36)
  • Spring Boot實(shí)戰(zhàn):攔截器和監(jiān)聽(tīng)器的應(yīng)用指南

    Spring Boot實(shí)戰(zhàn):攔截器和監(jiān)聽(tīng)器的應(yīng)用指南

    當(dāng)使用Spring Boot時(shí),我們可以通過(guò)攔截器(Interceptor)和監(jiān)聽(tīng)器(Listener)來(lái)實(shí)現(xiàn)對(duì)請(qǐng)求和響應(yīng)的處理。攔截器和監(jiān)聽(tīng)器提供了一種可插拔的機(jī)制,用于在請(qǐng)求處理過(guò)程中進(jìn)行自定義操作,例如記錄日志、身份驗(yàn)證、權(quán)限檢查等。下面通過(guò)提供一個(gè)示例,展示如何使用攔截器和

    2024年02月09日
    瀏覽(31)
  • SpringBoot2.0(過(guò)濾器,監(jiān)聽(tīng)器,攔截器)

    SpringBoot2.0(過(guò)濾器,監(jiān)聽(tīng)器,攔截器)

    使用Servlet3.0的注解進(jìn)行配置 啟動(dòng)類(lèi)里面增加 @ServletComponentScan ,進(jìn)行掃描 新建一個(gè)Filter類(lèi),implements Filter ,并實(shí)現(xiàn)對(duì)應(yīng)接口 @WebFilter 標(biāo)記一個(gè)類(lèi)為Filter,被spring進(jìn)行掃描 urlPatterns:攔截規(guī)則,支持正則 控制chain.doFilter的方法的調(diào)用,來(lái)實(shí)現(xiàn)是否通過(guò)放行, 不放行的話,web應(yīng)用

    2024年02月07日
    瀏覽(20)
  • 207、SpringBoot 整合 RabbitMQ 實(shí)現(xiàn)消息的發(fā)送 與 接收(監(jiān)聽(tīng)器)

    207、SpringBoot 整合 RabbitMQ 實(shí)現(xiàn)消息的發(fā)送 與 接收(監(jiān)聽(tīng)器)

    1、ContentUtil 先定義常量 2、RabbitMQConfig 創(chuàng)建隊(duì)列的兩種方式之一: 配置式: 在容器中配置 org.springframework.amqp.core.Queue 類(lèi)型的Bean,RabbitMQ將會(huì)自動(dòng)為該Bean創(chuàng)建對(duì)應(yīng)的隊(duì)列。 就是在配置類(lèi)中創(chuàng)建一個(gè)生成消息隊(duì)列的@Bean。 問(wèn)題: 用 @Configuration 注解聲明為配置類(lèi),但是項(xiàng)目啟動(dòng)

    2024年02月06日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包