spring 事件简介

一、实现原理 

        使用了设计模式当中的观察者模式，该模式是定义了一种一对多的依赖关系，多个观察者可以监听同一个主题对象，当这个对象发生变化时，会通知相应的观察者会做出相应的变化。 

 二、组成 

 

 事件监听器：需要继承ApplicationListener或定义@EventListener,用于监听和处理特定的事件 

 

 

 事件类：需要继承ApplicationEvent或子类，用于封装事件的具体信息 

 

 

 事件发布者：用于发布事件，应用上下文ApplicationContext已实现 ApplicationEventPublisher 

 

 

 事件广播器： ApplicationEventMulticaster 用于管理事件监听器的注册和事件的广播。 

 

 

 三、特性 

 

 解耦：通过事件机制，发起事件的组件不需要关心谁执行，处理事件的组件也不需要关心来源，从而降低了组件之间的耦合度； 

 

 

 异步处理：spring事件支持异步处理，事件可以在不同的线程中执行，从而提高了响应速度及并发性 

 

 

 灵活性: 新的事件可以轻松的连接到事件流程里面，从而不需要修改原来的代码，容易扩展 

 

 

 应用场景广泛：可以应用在数据更新通知、日志处理、异步任务触发等 

 

 四、示例 

 // 定义事件类 

public class CustomEvent extends ApplicationEvent { 

 private String message; 

 

 public CustomEvent(Object source, String message) { 

 super(source); 

 this.message = message; 

 } 

 

 public String getMessage() { 

 return message; 

 } 

} 

 

// 定义事件监听器 

@Component 

public class CustomEventListener implements ApplicationListener<CustomEvent> { 

 @Override 

 public void onApplicationEvent(CustomEvent event) { 

 System.out.println("Received CustomEvent: " + event.getMessage()); 

 } 

} 

 

// 或者使用@EventListener注解 

@Component 

public class AnotherCustomEventListener { 

 @EventListener 

 public void handleCustomEvent(CustomEvent event) { 

 System.out.println("Another CustomEvent received: " + event.getMessage()); 

 } 

} 

 

// 发布事件 

@Component 

public class CustomEventPublisher { 

 @Autowired 

 private ApplicationEventPublisher publisher; 

 

 public void publishCustomEvent(String message) { 

 CustomEvent customEvent = new CustomEvent(this, message); 

 publisher.publishEvent(customEvent); 

 } 

} 

   

 

 

 

 

        