最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring注解驅(qū)動(dòng)之ApplicationListener用法解讀

 更新時(shí)間:2022年09月30日 08:51:27   作者:融極  
這篇文章主要介紹了Spring注解驅(qū)動(dòng)之ApplicationListener用法解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

ApplicationListener概述

ApplicationListener按照字面意思,它應(yīng)該是Spring里面的應(yīng)用監(jiān)聽器,也就是Spring為我們提供的基于事件驅(qū)動(dòng)開發(fā)的功能。

也就是說(shuō)我們只要寫一個(gè)監(jiān)聽器來(lái)實(shí)現(xiàn)ApplicationListener接口,該接口中泛型就是我們要監(jiān)聽的事件,那么如果我們發(fā)布對(duì)應(yīng)的事件,就能在實(shí)現(xiàn)的監(jiān)聽器里面處理。

ApplicationListener作用

主要作用就是來(lái)監(jiān)聽I(yíng)OC容器中發(fā)布的一些事件,只有事件發(fā)送便會(huì)來(lái)觸發(fā)該監(jiān)聽器的回調(diào),從而來(lái)完成事件驅(qū)動(dòng)模型的開發(fā)。

ApplicationListener用法

首先,編寫一個(gè)類來(lái)實(shí)現(xiàn)ApplicationListener接口,例如MyApplicationListener,這實(shí)際上就是寫了一個(gè)監(jiān)聽器。

package com.meimeixia.ext;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
// 當(dāng)然了,監(jiān)聽器這東西要工作,我們還得把它添加在容器中
@Component
public class MyApplicationListener implements ApplicationListener<ApplicationEvent> {
	// 當(dāng)容器中發(fā)布此事件以后,下面這個(gè)方法就會(huì)被觸發(fā)
	@Override
	public void onApplicationEvent(ApplicationEvent event) {
		// TODO Auto-generated method stub
		System.out.println("收到事件:" + event);
	}
}

測(cè)試功能

package com.meimeixia.test;
import org.junit.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.meimeixia.ext.ExtConfig;
public class IOCTest_Ext {
	
	@Test
	public void test01() {
		AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ExtConfig.class);
		
		// 關(guān)閉容器
		applicationContext.close();
	}
}

可以看到我們收到了兩個(gè)事件,這兩個(gè)事件分別是

org.springframework.context.event.ContextRefreshedEvent和org.springframework.context.event.ContextClosedEvent

其中第一個(gè)是容器已經(jīng)刷新完成事件,第二個(gè)是容器關(guān)閉事件。

而且,從下圖中可以看到,這兩個(gè)事件都是ApplicationEvent下面的事件。

只不過(guò)現(xiàn)在暫時(shí)還沒(méi)用到容器開始和容器停止這兩個(gè)事件而已。

其實(shí),想必你也已經(jīng)猜到了,IOC容器在刷新完成之后便會(huì)發(fā)布ContextRefreshedEvent事件,一旦容器關(guān)閉了便會(huì)發(fā)布ContextClosedEvent事件。

我們自己來(lái)發(fā)布一個(gè)事件

    public static void main(String[] args) {
        final AnnotationConfigApplicationContext applicationContext
                = new AnnotationConfigApplicationContext(ExtConfig.class);
        applicationContext.publishEvent("發(fā)送事件");
        applicationContext.close();
    }
@Component
public class MyApplicationListener implements ApplicationListener<PayloadApplicationEvent> {
    public void onApplicationEvent(PayloadApplicationEvent applicationEvent) {
        System.out.println("收到事件:" + applicationEvent);
        System.out.println(applicationEvent.getPayload());
    }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。 

相關(guān)文章

  • Spring容器的創(chuàng)建過(guò)程之如何注冊(cè)BeanPostProcessor詳解

    Spring容器的創(chuàng)建過(guò)程之如何注冊(cè)BeanPostProcessor詳解

    關(guān)于BeanPostProcessor 各位一定不陌生,今天整理的這篇文章總結(jié)了如何注冊(cè)BeanPostProcessor,文中有非常詳細(xì)的圖文示例,需要的朋友可以參考下
    2021-06-06
  • 基于java構(gòu)造方法Vector創(chuàng)建對(duì)象源碼分析

    基于java構(gòu)造方法Vector創(chuàng)建對(duì)象源碼分析

    這篇文章主要介紹了java構(gòu)造函數(shù)中對(duì)Vector源碼及原理的分析,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪
    2021-09-09
  • Java字節(jié)碼中jvm實(shí)例用法

    Java字節(jié)碼中jvm實(shí)例用法

    在本篇文章里小編給大家整理的是一篇關(guān)于Java字節(jié)碼中jvm實(shí)例用法內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-02-02
  • idea創(chuàng)建Springboot多模塊項(xiàng)目(聚合項(xiàng)目)

    idea創(chuàng)建Springboot多模塊項(xiàng)目(聚合項(xiàng)目)

    文章詳細(xì)介紹了如何在idea創(chuàng)建Springboot多模塊項(xiàng)目(聚合項(xiàng)目),包括創(chuàng)建父工程和子工程、編輯pom.xml文件、編寫代碼和測(cè)試,還介紹了如何處理Maven視圖中的層級(jí)關(guān)系,并展示了如何同時(shí)啟動(dòng)多個(gè)子項(xiàng)目
    2024-11-11
  • Spring Boot中使用RabbitMQ 生產(chǎn)消息和消費(fèi)消息的實(shí)例代碼

    Spring Boot中使用RabbitMQ 生產(chǎn)消息和消費(fèi)消息的實(shí)例代碼

    本文介紹了在SpringBoot中如何使用RabbitMQ進(jìn)行消息的生產(chǎn)和消費(fèi),詳細(xì)闡述了RabbitMQ中交換機(jī)的作用和類型,包括直連交換機(jī)、主題交換機(jī)、扇出交換機(jī)和頭交換機(jī),并解釋了各自的消息路由機(jī)制,感興趣的朋友一起看看吧
    2024-10-10
  • Java實(shí)現(xiàn)批量下載(打包成zip)的實(shí)現(xiàn)

    Java實(shí)現(xiàn)批量下載(打包成zip)的實(shí)現(xiàn)

    這篇文章主要介紹了Java實(shí)現(xiàn)批量下載(打包成zip)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Mybatis一對(duì)多查詢的兩種姿勢(shì)(值得收藏)

    Mybatis一對(duì)多查詢的兩種姿勢(shì)(值得收藏)

    這篇文章主要給大家介紹了關(guān)于Mybatis一對(duì)多查詢的兩種姿勢(shì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Spring Boot 2 整合 QuartJob 實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理功能

    Spring Boot 2 整合 QuartJob 實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理功能

    Quartz是一個(gè)完全由java編寫的開源作業(yè)調(diào)度框架,形式簡(jiǎn)易,功能強(qiáng)大。接下來(lái)通過(guò)本文給大家分享Spring Boot 2 整合 QuartJob 實(shí)現(xiàn)定時(shí)器實(shí)時(shí)管理功能,感興趣的朋友一起看看吧
    2019-11-11
  • 解決本機(jī)安裝的JDK8,啟動(dòng)IDEA2019沒(méi)反應(yīng)的問(wèn)題(開發(fā)工具)

    解決本機(jī)安裝的JDK8,啟動(dòng)IDEA2019沒(méi)反應(yīng)的問(wèn)題(開發(fā)工具)

    這篇文章主要介紹了解決本機(jī)安裝的JDK8啟動(dòng)IDEA2019沒(méi)反應(yīng)的問(wèn)題(開發(fā)工具),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java虛擬機(jī)底層原理詳細(xì)分析

    Java虛擬機(jī)底層原理詳細(xì)分析

    這篇文章主要介紹了Java虛擬機(jī)底層原理詳細(xì)分析,運(yùn)行時(shí)數(shù)據(jù)區(qū)就是俗稱的虛擬機(jī)內(nèi)存,主要包括我們熟悉的堆、棧、本地方法棧、方法區(qū)(元空間)、程序計(jì)數(shù)器,虛擬機(jī)調(diào)優(yōu)主要針對(duì)的是運(yùn)行時(shí)數(shù)據(jù)區(qū),也就是虛擬機(jī)內(nèi)存,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

明光市| 乡城县| 南召县| 盘锦市| 永善县| 乡城县| 吴江市| 诸城市| 巴彦淖尔市| 梁山县| 莫力| 普兰县| 辉南县| 宝鸡市| 长垣县| 万荣县| 泸州市| 芜湖市| 祁东县| 金塔县| 乌拉特中旗| 朝阳市| 龙陵县| 合肥市| 柳林县| 突泉县| 阿鲁科尔沁旗| 内乡县| 资讯 | 彰化县| 苗栗市| 兰西县| 裕民县| 陇川县| 宣城市| 介休市| 长宁县| 绍兴市| 澄江县| 山东| 鄂托克前旗|