当一个Bean处理完一个任务之后,希望另外一个Bean知道并能做相应的处理这时我们就需要让别外一个Bean监听当前Bean所发送的事件。
Spring的事件需要遵循如下流程:
(1)自定义事件,继承ApplicationEvent。
(2)定义事件监听器,实现ApplicationListener。
(3)使用容器发布事件。
自定义事件:
**public class MyEvent extends ApplicationEvent{
private static final long serialVersionUID = 1L;
private String message;
public MyEvent(Object source,String message) {
super(source);
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
自定义的事件必须继承 ApplicationEvent,重写构造函数。
自定义监听器:
@Component
public class MyListener implements ApplicationListener<MyEvent>{
public void onApplicationEvent(MyEvent myEvent) {
String message = myEvent.getMessage();
System.out.println("MyListener接收到MyEvent中的消息:"+message);
}
}
自定义的监听器必须实现ApplicationListener接口,并指定监听器需要监听哪个事件(就是泛型指定事件类)
实现了接口就要实现onApplicationEvent(),对监听到的事件进行处理。
定义发布事件的类:
@Component
public class EventPublisher {
@Autowired
private ApplicationContext applicationContext;
public void publish(String message) {
applicationContext.publishEvent(new MyEvent(this, message));
}
}
注入ApplicationContext类,使用类中的publishEvent()方法进行事件的发布。
配置类:
@Configuration
@ComponentScan("com.demo02.event")
public class EventConfig {
}
测试运行:
public class App {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);
EventPublisher publisher = context.getBean(EventPublisher.class);
publisher.publish("hello world !");
context.close();
}
}