成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring中ApplicationListener的使用

charles_paul / 855人閱讀

摘要:背景是事件機制的一部分,與抽象類類配合來完成的事件機制。如果容器中存在的,當調(diào)用方法時,對應的會被觸發(fā)。單元測試類執(zhí)行單元測試,會發(fā)現(xiàn)事件發(fā)布之后,監(jiān)聽器方法被調(diào)用,日志被打印出來。

背景

ApplicationListener是Spring事件機制的一部分,與抽象類ApplicationEvent類配合來完成ApplicationContext的事件機制。

如果容器中存在ApplicationListener的Bean,當ApplicationContext調(diào)用publishEvent方法時,對應的Bean會被觸發(fā)。這一過程是典型的觀察者模式的實現(xiàn)。

ApplicationListener源碼
@FunctionalInterface
public interface ApplicationListener extends EventListener {

    /**
     * Handle an application event.
     * @param event the event to respond to
     */
    void onApplicationEvent(E event);

}
ContextRefreshedEvent事件的監(jiān)聽

以Spring的內(nèi)置事件ContextRefreshedEvent為例,當ApplicationContext被初始化或刷新時,會觸發(fā)ContextRefreshedEvent事件,下面我們就實現(xiàn)一個ApplicationListener來監(jiān)聽此事件的發(fā)生。

@Component // 需對該類進行Bean的實例化
public class LearnListener implements ApplicationListener {
   @Override
   public void onApplicationEvent(ContextRefreshedEvent event) {
      // 打印容器中出事Bean的數(shù)量
      System.out.println("監(jiān)聽器獲得容器中初始化Bean數(shù)量:" + event.getApplicationContext().getBeanDefinitionCount());
   }
}

如上,便完成了一個事件監(jiān)聽類的實現(xiàn)和實例化。

自定義事件及監(jiān)聽

首先自定義事件:NotifyEvent。

public class NotifyEvent extends ApplicationEvent {


    private String email;

    private String content;

    public NotifyEvent(Object source) {
        super(source);
    }

    public NotifyEvent(Object source, String email, String content) {
        super(source);
        this.email = email;
        this.content = content;
    }
    // 省略getter/setter方法
}

定義監(jiān)聽器NotifyListener:

@Component
public class NotifyListener implements ApplicationListener {

    @Override
    public void onApplicationEvent(NotifyEvent event) {
        System.out.println("郵件地址:" + event.getEmail());
        System.out.println("郵件內(nèi)容:" + event.getContent());
    }
}

監(jiān)聽器通過@Component注解進行實例化,并在onApplicationEvent中打印相關(guān)信息。

單元測試類:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ListenerTest {

    @Autowired
    private WebApplicationContext webApplicationContext;

    @Test
    public void testListener() {

        NotifyEvent event = new NotifyEvent("object", "[email protected]", "This is the content");

        webApplicationContext.publishEvent(event);
    }
}

執(zhí)行單元測試,會發(fā)現(xiàn)事件發(fā)布之后,監(jiān)聽器方法被調(diào)用,日志被打印出來。

原文鏈接:https://www.choupangxia.com/2...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/75418.html

相關(guān)文章

  • spring ApplicationListener&ApplicationEvent

    摘要:準備好了我們可以開始向中發(fā)布,當發(fā)布后,所有在中的都會收到對應的。將類注入到的中。測試和通過方法將發(fā)布到應用上下文中,同時這個動作會觸發(fā)收到事件。深入剖析發(fā)布與監(jiān)聽的過程在使用方法發(fā)布的時候,最終會調(diào)用到中的類的如下的一段代碼。 本篇主要來聊一聊spring中ApplicationListener接口和ApplicationEvent類。 從命名上可以很容易的看出來一個是listene...

    keke 評論0 收藏0
  • spring boot學習(3): SpringApplication 事件監(jiān)聽

    摘要:在框架中,有多種事件這些時間會在不同的運行時刻發(fā)布,來通知監(jiān)聽者。本文僅僅介紹的事件的監(jiān)聽。也可以在文件中配置。 spring application listener 在 spring 框架中,有多種事件, 這些時間會在不同的運行時刻發(fā)布,來通知監(jiān)聽者。本文僅僅介紹 SpringApplicationEvent 的事件的監(jiān)聽。 事件類型 EventType 發(fā)布時間 App...

    Acceml 評論0 收藏0
  • Spring Boot啟動過程及回調(diào)接口匯總

    摘要:創(chuàng)建及準備創(chuàng)建。目前已知關(guān)心這個事件的有要注意的是在這個階段,里只有,是的加載工作的起點。原因是注入這些回調(diào)接口本身沒有什么意義。在其構(gòu)造函數(shù)內(nèi)部間接的給注冊了幾個與相關(guān)注解的處理器。 相關(guān)代碼在: https://github.com/chanjarster/spring-boot-all-callbacks 注:本文基于spring-boot 1.4.1.RELEASE, spri...

    Taonce 評論0 收藏0
  • 面試官:“談談Spring都用到了那些設計模式?”。

    摘要:會一直完善下去,歡迎建議和指導,同時也歡迎中用到了那些設計模式中用到了那些設計模式這兩個問題,在面試中比較常見。工廠設計模式使用工廠模式可以通過或創(chuàng)建對象。 我自己總結(jié)的Java學習的系統(tǒng)知識點以及面試問題,已經(jīng)開源,目前已經(jīng) 41k+ Star。會一直完善下去,歡迎建議和指導,同時也歡迎Star: https://github.com/Snailclimb... JDK 中用到了那...

    Astrian 評論0 收藏0
  • Learn Spring - Spring IoC

    摘要:事件事件監(jiān)聽器,對監(jiān)聽到的事件進行處理。擁有一個成員變量,提供了容器監(jiān)聽器的注冊表。注冊事件監(jiān)聽器根據(jù)反射機制,使用的方法,從中找出所有實現(xiàn)的,將它們注冊為容器的事件監(jiān)聽器,實際的操作就是將其添加到事件廣播器所提供的監(jiān)聽器注冊表中。 1. Spring的資源抽象接口 假如有一個文件位于Web應用的類路徑下,用戶可以通過以下方式對這個文件資源進行訪問: 通過FileSystemReso...

    luzhuqun 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<