spring event
简介
spring event是spring提供的观察者模式实现机制
名词
事件, 发布者, 观察者
简单实现(Spring Framework 4.2之前)
事件
@Getter
@Setter
public class MySpringEvent extends ApplicationEvent {
/**
* 消息
*/
private String message;
public MySpringEvent(Object source, String message) {
super(source);
this.message = message;
}
}
发布者
@Component
public class MySpringPublish {
@Resource
private ApplicationEventPublisher publisher;
//使用ApplicationContext对象的publishEvent发布事件
public void publish(String msg){
publisher.publishEvent(new MySpringEvent(this,msg));
}
}
观察者
@Component
public class MySpringConsume implements ApplicationListener<MySpringEvent> {
@Override
public void onApplicationEvent(MySpringEvent event) {
String msg = event.getMessage();
System.out.println("MySpringEvent获取到了监听消息:" + msg);
}
}
使用观察者注解实现(Spring Framework 4.2之后)
事件
@Getter
@Setter
public class MySpringEvent extends ApplicationEvent {
/**
* 消息
*/
private String message;
public MySpringEvent(Object source, String message) {
super(source);
this.message = message;
}
}
发布者
@Component
public class MySpringPublish {
@Resource
private ApplicationEventPublisher publisher;
//使用ApplicationContext对象的publishEvent发布事件
public void publish(String msg){
publisher.publishEvent(new MySpringEvent(this,msg));
}
}
观察者
@Component
public class MySpringConsume {
@EventListener
public void onApplicationEvent(MySpringEvent event) {
String msg = event.getMessage();
System.out.println("MySpringEvent获取到了监听消息:" + msg);
}
}
全注解实现(推荐, 不实现接口或集成类, 侵入性小) (Spring Framework 4.2之后)
事件
@Getter
@Setter
public class MySpringEvent{
/**
* 消息
*/
private String message;
public MySpringEvent(Object source, String message) {
super(source);
this.message = message;
}
}
发布者
@Component
public class MySpringPublish {
@Resource
private ApplicationEventPublisher publisher;
//使用ApplicationContext对象的publishEvent发布事件
public void publish(String msg){
publisher.publishEvent(new MySpringEvent(this,msg));
}
}
观察者
@Component
public class MySpringConsume {
@EventListener
public void onApplicationEvent(MySpringEvent event) {
String msg = event.getMessage();
System.out.println("MySpringEvent获取到了监听消息:" + msg);
}
}
Transaction-Bound Events
查看链接
文献
链接: spring event