一、什麼是Event?
Spring的Event(事件)爲Bean與Bean之間的消息通信提供了支持。
通俗來說,當BeanA處理完事情,我們希望BeanB知道BeanA處理了這件事情並作出相應處理,這個時候我們就要用到Event了
二、如何使用Event?
- 自定義事件,繼承ApplicationEvent
- 定義事件監聽器,實現ApplicationListener
- 使用容器發佈事件
三、EventDemo
事件類
package com.cactus.demo.event;
import org.springframework.context.ApplicationEvent;
/**
* Created by liruigao
* Date: 2019-10-15 14:44
* Description:
*/
public class DemoEvent extends ApplicationEvent {
private String msg;
public DemoEvent(Object source, String msg) {
super(source);
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
監聽器類
package com.cactus.demo.event;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;
/**
* Created by liruigao
* Date: 2019-10-15 14:45
* Description:
*/
@Component
public class EventListener implements ApplicationListener<DemoEvent> {
public void onApplicationEvent(DemoEvent demoEvent) {
String msg = demoEvent.getMsg();
System.out.println("I had recived some msgs from publisher : " + msg);
}
}
容器發佈類
package com.cactus.demo.event;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
/**
* Created by liruigao
* Date: 2019-10-15 14:48
* Description:
*/
@Component
public class DemoPublisher {
@Autowired
private ApplicationContext applicationContext;
public void publish(String msg) {
applicationContext.publishEvent(new DemoEvent(this, msg));
}
}
配置類
package com.cactus.demo.event;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* Created by liruigao
* Date: 2019-10-15 14:51
* Description:
*/
@Configuration
@ComponentScan("com.cactus.demo.event")
public class EventConfig {
}
Main
package com.cactus.demo.event;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Created by liruigao
* Date: 2019-10-15 14:50
* Description:
*/
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);
DemoPublisher publisher = context.getBean(DemoPublisher.class);
publisher.publish("hi honey~");
context.close();
}
}
result