Application Event
Spring的事件为Bean与Bean之间的消息通信提供了支持。当一个Bean处理完一个任务之后,希望另外一个Bean知道并能做相应的处理,这时我们就需要让另外一个Bean监听Bean所发送的事件。
Spring的事件需要遵循如下流程:
(1) 自定义事件,集成ApplicationEvent。
(2)定义事件监听器,实现ApplicationListener。
(3)使用容器发布事件。
自定义事件:
继承ApplicationEvent,msg用于记录接受的事件消息
public class testEvent extends ApplicationEvent{
private static final long serialVersionUID = 1L;
private String msg;
public testEvent(Object source,String msg) {
super(source);
// TODO Auto-generated constructor stub
this.msg=msg;
}
public String getmsg() {
return this.msg;
}
}
定义事件监听器
实现接口ApplicationListener并指定监听的事件类型
编写onApplicationEvent方法,实现触发事件操作
@Component
public class testListener implements ApplicationListener<testEvent>{
public void onApplicationEvent(testEvent event) {
// TODO Auto-generated method stub
System.out.println("触发事件");
}
}
实现如何触发事件
实现接口ApplicationContextAware
编写方法setApplicationContext
@Component
public class testbean implements ApplicationContextAware {
private ApplicationContext a=null;
public void run() {
System.out.println("XXX run....");
testEvent t=new testEvent(a, "传入事件信息"); //在容器中生成事件
a.publishEvent(t); //触发事件
}
//创建容器
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
// TODO Auto-generated method stub
this.a=applicationContext;
}
}
由于在服务启动中Spring容器已经启动,可以通过自动注入方式注入ApplicationContext。
@Component
public class testbean {
@Autowired
private ApplicationContext a; //自动注入ApplicationContext
public void run() {
System.out.println("XXX....");
testEvent t=new testEvent(a, "run");
a.publishEvent(t); //触发事件
}
}