一、事件
Spring的事件(Application Event)为Bean与Bean之间的消息通信提供了支持。当一个Bean处理完一个任务之后,希望另一个Bean知道并能做出相应的处理,这是我们就需要让另外一个Bean监听当前Bean所发送的事件。
Spring的事件需要遵循如下流程:
(1)自定义事件,集成Application。
(2)定义事件监听器,实现ApplicationListener。
(3)使用容器发布事件。
1.示例
(1)自定义事件
//自定义事件
public class DemoEvent extends ApplicationEvent {
private static final long serialVersionUID=1L;
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;
}
}
(2)事件监听器
//事件监听器
@Component
public class DemoListener implements ApplicationListener<DemoEvent> {
public void onApplicationEvent(DemoEvent demoEvent) {
String msg=demoEvent.getMsg();
System.out.println("我(bean--demoListener)接收到了bean--demoPublisher发布的消息:"+msg);
}
}
/**
* 实现ApplicationListener接口,并指定监听的事件类型
* 使用onApplicationEvent方法对消息进行接收处理
*/
(3)事件法布类
//事件发布类
@Component
public class DemoPublisher {
@Autowired
ApplicationContext applicationContext;
public void publish(String msg){
applicationContext.publishEvent(new DemoEvent(this,msg));
}
}
/**
* 注入ApplicationContext用来发布事件
* 使用ApplicationContect的publishEvent方法来发布
*/
(4)配置类
@Configuration
@ComponentScan("com.zhao.spring.ApplicationEvent")
public class EventConfig {
}
(5)启动类
public class EventMain {
public static void main(String[] args) {
AnnotationConfigApplicationContext context=
new AnnotationConfigApplicationContext(EventConfig.class);
DemoPublisher demoPublisher=context.getBean(DemoPublisher.class);
demoPublisher.publish("hello application event!");
context.close();
}
}
需要注意的是,这种事件机制并不是普通的监听发送某些东西,而是监听发送一个事件,publish的是Event: