日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

事件監聽和發布是Spring Framework中的一種機制,用于實現松散耦合的組件之間的通信。下面是事件監聽和發布的詳細過程:

事件發布的過程:

  1. 創建事件對象:首先,您需要創建一個事件類,通常繼承自ApplicationEvent。這個事件類用于封裝事件的相關信息。
  2. 創建事件發布者:您需要創建一個事件發布者(通常是一個Spring Bean),該發布者包含一個注入的ApplicationEventPublisher接口,用于發布事件。
  3. 發布事件:在需要發布事件的地方,事件發布者調用publishEvent()方法,并將創建的事件對象作為參數傳遞給該方法。Spring容器會負責將事件傳遞給所有已注冊的監聽器。
  4. 事件傳播:Spring容器會遍歷所有已注冊的事件監聽器,將事件傳遞給每個監聽器。監聽器的onApplicationEvent()方法會被調用,處理事件。

事件監聽的過程:

  1. 創建事件監聽器:您需要創建一個或多個事件監聽器,這些監聽器通常實現ApplicationListener接口。每個監聽器負責處理特定類型的事件。
  2. 注冊監聽器:事件監聽器需要在Spring容器中注冊,以便Spring知道它們存在。您可以使用@Component注解或配置類中的@Bean注解進行注冊。
  3. 事件監聽器的初始化:當應用程序啟動時,Spring容器會初始化所有注冊的監聽器。
  4. 等待事件:監聽器會一直等待與其關聯的事件被發布。當事件被發布時,監聽器會被調用以處理事件。
  5. 處理事件:監聽器實現的onApplicationEvent()方法會被調用,事件對象會作為參數傳遞給該方法。監聽器可以根據事件的信息執行相應的操作。

Spring Framework中的ApplicationEventPublisher接口用于發布和訂閱應用程序事件。事件是一種機制,用于在應用程序中實現松散耦合的組件通信。當某些事件發生時,發布者可以通知所有已注冊的監聽器,并執行相應的操作。下面是ApplicationEventPublisher的詳細用法說明和示例代碼:

創建自定義事件類:

首先,需要創建一個自定義事件類,繼承自ApplicationEvent。這個事件類將包含希望在應用程序中發布的事件的信息。

import org.springframework.context.ApplicationEvent;

public class MyCustomEvent extends ApplicationEvent {
    private String message;

    public MyCustomEvent(Object source, String message) {
        super(source);
        this.message = message;
    }

    public String getMessage() {
        return message;
    }
}

創建事件發布者:

事件發布者通常是Spring容器中的一個Bean,它使用ApplicationEventPublisher來發布事件。可以注入ApplicationEventPublisher接口以在需要時發布事件。

import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;

@Component
public class MyEventPublisher {

    private final ApplicationEventPublisher eventPublisher;

    public MyEventPublisher(ApplicationEventPublisher eventPublisher) {
        this.eventPublisher = eventPublisher;
    }

    public void publishCustomEvent(String message) {
        MyCustomEvent customEvent = new MyCustomEvent(this, message);
        eventPublisher.publishEvent(customEvent);
    }
}

創建事件監聽器:

事件監聽器負責處理事件。可以創建一個或多個事件監聽器,每個監聽器可以處理不同類型的事件。

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class MyEventListener implements ApplicationListener<MyCustomEvent> {

    @Override
    public void onApplicationEvent(MyCustomEvent event) {
        String message = event.getMessage();
        // 處理事件
        System.out.println("Received custom event with message: " + message);
    }
}

使用事件發布者發布事件:

在需要發布事件的地方,可以調用事件發布者的方法來觸發事件。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class MyApplication {

    public static void mAIn(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(MyApplication.class, args);
        
        MyEventPublisher eventPublisher = context.getBean(MyEventPublisher.class);
        eventPublisher.publishCustomEvent("Hello, Spring Boot Events!");
    }
}

當運行MyApplication時,事件發布者將發布一個自定義事件,然后事件監聽器將收到事件并執行相應的操作。

也可以創建同步和異步事件監聽器,以便在事件發生時執行不同的操作。同步監聽器會在事件發布線程中直接執行,而異步監聽器則會將事件處理委托給另一個線程池,以實現并發處理。下面是同步和異步事件監聽的示例說明:

同步事件監聽器示例:

import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class MySyncEventListener implements ApplicationListener<MyCustomEvent> {
    @Override
    public void onApplicationEvent(MyCustomEvent event) {
        String message = event.getMessage();
        // 模擬一個長時間運行的操作
        try {
            Thread.sleep(2000); // 模擬2秒的處理時間
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Synchronous Event Listener - Received custom event with message: " + message);
    }
}

在這個示例中,MySyncEventListener是一個同步事件監聽器。它在onApplicationEvent()方法中執行了一個模擬的長時間運行的操作(2秒)。

異步事件監聽器示例:

要創建異步事件監聽器,需要使用@Async注解來標記監聽器方法,然后配置一個TaskExecutorbean,以便Spring可以在異步線程池中執行監聽器方法。以下是一個示例:

import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

@Component
public class MyAsyncEventListener implements ApplicationListener<MyCustomEvent> {
    @Async
    @Override
    public void onApplicationEvent(MyCustomEvent event) {
        String message = event.getMessage();
        // 模擬一個長時間運行的操作
        try {
            Thread.sleep(2000); // 模擬2秒的處理時間
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Asynchronous Event Listener - Received custom event with message: " + message);
    }
}

在這個示例中,MyAsyncEventListener是一個異步事件監聽器。它的onApplicationEvent()方法被標記為@Async,并且在方法內模擬了一個長時間運行的操作。

配置異步事件監聽:

要配置異步事件監聽器,需要執行以下步驟:

在Spring Boot應用程序的主類上使用@EnableAsync注解以啟用異步支持。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;

@SpringBootApplication
@EnableAsync
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

在配置類或主類中定義一個TaskExecutor bean,以配置異步線程池。

import org.springframework.context.annotation.Bean;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

@Bean
public TaskExecutor taskExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(5); // 設置核心線程數
    executor.setMaxPoolSize(10); // 設置最大線程數
    executor.setQueueCapacity(25); // 設置隊列容量
    executor.setThreadNamePrefix("MyAsyncThread-");
    executor.initialize();
    return executor;
}

通過以上配置,MyAsyncEventListener將會在異步線程中處理事件,而不會阻塞主線程。

請注意,異步監聽器的配置可能因應用程序的需求而有所不同。我們可以根據需要調整線程池的大小和其他參數。

示例中完整代碼,可以從下面網址獲取:

https://gitee.com/jlearning/wechatdemo.git

https://Github.com/icoderoad/wxdemo.git

分享到:
標簽:Springboot
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定