Spring應用事件(Application Event)


  Spring的事件為Bean與Bean的消息通信提供的支持。當一個Bean處理完了一個任務以后,希望另一個Bean知道並能做出相應的處理,這是我們就需要讓另一個Bean監聽當前Bean所發送的事件。 

  Spring中使用事件的大概流程如下:

  (1)定義事件

  (2)定義事件監聽器

  (3)使用容器發布事件


 

示例:

  (1)定義事件

  自定義事件需要實現ApplicationEvent接口。

 
         
package learnspring.learnspring.event;

import org.springframework.context.ApplicationEvent;

/**
* @author 肖政宇
* @date 2019-09-23 14:36
* 說明:自定義事件
*/
public class DemoEvent extends ApplicationEvent {
private static final long serialVersionUID = 1L;
private String msg;

DemoEvent(Object source, String msg) {
super(source);
this.msg = msg;
}

String getMsg() {
return msg;
}

public void setMsg(String msg) {
this.msg = msg;
}
}

 

  (2)定義事件監聽器

  

 
         
package learnspring.learnspring.event;

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

/**
* @author 肖政宇
* @date 2019-09-23 14:39
* 說明:事件監聽器
* 實現ApplicationListener接口,同時聲明監聽的事件類型
*/
@Component
public class DemoListener implements ApplicationListener<DemoEvent> {
@Override
public void onApplicationEvent(DemoEvent event) {
String msg = event.getMsg();
System.out.println("我(bean-demoListener)接收到了bean-demoPublisher發布的消息:" + msg);
}
}
 

 

  (3)使用容器發布事件

package learnspring.learnspring.event;
package learnspring.learnspring.event;

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

/**
* @author 肖政宇
* @date 2019-09-23 14:43
* 說明:事件發布者
*/
@Component
public class DemoPublisher {
private ApplicationContext applicationContext;

@Autowired
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}

public void publish(String msg) {
applicationContext.publishEvent(new DemoEvent(this, msg));
}
}
 
        

測試:

 
         
package learnspring.learnspring;

import learnspring.learnspring.event.DemoPublisher;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class LearnspringApplicationTests {
DemoPublisher publisher;

@Autowired
public void setPublisher(DemoPublisher publisher) {
this.publisher = publisher;
}

@Test
public void contextLoads() {
System.out.println("事件發生!");
publisher.publish("Hello World!");
}

}
 

運行結果:

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM