Spring中ApplicationContext.publishEvent简介说明
下文笔者讲述Spring中ApplicationContext.publishEvent的简介说明,如下所示
ApplicationContext.publishEvent简介
ApplicationContext 使用publishEvent方法 (该方法继承于接口ApplicationEventPublisher) 发布事件(ApplicaitonEvent) 然后由Applicationlistener监听处理 ========================================== ApplicationContext事件 ApplicationContext.publishEvent 是Spring提供的解耦的一种方式 同样可以使用 MQ 组件 / 线程池 代替。 1.事件触发 && 监听处理过程 1.1使用 org.springframework.context 包下 ApplicationContext.publishEvent(ApplicationEvent appEvent) 发布事件 1.2使用 org.springframework.context.event 包下 @EventListener(事件名) 监听事件并处理 注意事项: (1) ApplicationContext.publishEvent 默认是同步操作, 并非发布后不管的异步操作 发布事件后需要等 @EventListener 执行完 (2) 如果需要开启异步操作 需在@EventListener 上增加@Async注解例:ApplicationContext.publishEvent示例分享
NotifyEvent.java import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @AllArgsConstructor @NoArgsConstructor public class NotifyEvent { /** * 这里放需要传递的参数内容 */ private Integer id; private String name; } 接收的客户端 消费者 import lombok.extern.slf4j.Slf4j; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Component; import org.springframework.scheduling.annotation.EnableAsync; /** * 接收异步消息的客户端 */ @EnableAsync //开启异步 ,如果已经加了就不用加了 @Component @Slf4j public class NotifyClient { /** * 异步接收客户端 相当于mq的消费者 * @param notifyEvent 会根据这个参数进行匹配 所以这里要和生产者的参数对象对应 */ @Async @EventListener public void notify(NotifyEvent notifyEvent){ try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } log.info("参数:{}",notifyEvent.toString()); } } 使用----生产者 @Resource protected ApplicationContext applicationContext; @GetMapping(value = "/test") public void test(){ /** * 异步调用,相当于生产者 * 参数通过对象传入 */ applicationContext.publishEvent(new NotifyEvent(1,"测试java265.com来咯~~~发生")); }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。