Spring中ApplicationContext.publishEvent简介说明

欣喜 Spring 发布时间:2024-01-22 14:50:15 阅读数:17776 1
下文笔者讲述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来咯~~~发生"));
    } 
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/Spring/202401/7730.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者