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来咯~~~发生"));
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


