zoukankan      html  css  js  c++  java
  • Spring ApplicationContext事件处理机制

    ApplicationContext中事件处理是由ApplicationEvent类和ApplicationListener接口来提供的。如果一个Bean实现了ApplicationListener接口,并且已经发布到容器中去,每次ApplicationContext发布一个ApplicationEvent事件,这个Bean就会接到通知。Spring事件机制是观察者模式的实现。
    ApplicationContext中的事件处理是通过ApplicationEvent类和ApplicationListener接口来提供的,
    通过ApplicationContext的publishEvent()方法发布到ApplicationListener;
    在这里包含三个角色:被发布的事件,事件的监听者和事件发布者。
    事件发布者在发布事件的时候通知事件的监听者。
    spring的事件需要遵循以下流程:
    (1)自定义事件:继承ApplicationEvent   当前类的作用
    (2)定义事件监听器:实现ApplicationListener
    (3)使用容器发布事件

    代码实现

    1,容器事件

    package com.example.demo.springEvent;
    
    import org.springframework.context.ApplicationEvent;
    
    /**
     * @Description //TODO 容器事件
     * @Author GaoX
     * @Date 2020/6/29 16:33
     */
    public class MessageEvent extends ApplicationEvent {
    
        private String text;
    
        public String getText() {
            return text;
        }
    
        public void setText(String text) {
            this.text = text;
        }
    
        public MessageEvent(Object source) {
            super(source);
        }
    
        public MessageEvent(Object source, String text) {
            super(source);
            this.text = text;
        }
    
        public void print(){
            System.out.println("监听器调用此方法!!!!!!!!!!!!");
        }
    
    }

    2,监听器

    package com.example.demo.springEvent;
    
    import org.springframework.context.ApplicationEvent;
    import org.springframework.context.ApplicationListener;
    import org.springframework.stereotype.Component;
    
    /**
     * @Description //TODO 监听器
     * @Author GaoX
     * @Date 2020/6/29 16:36
     */
    @Component
    public class MessageListener implements ApplicationListener {
    
        @Override
        public void onApplicationEvent(ApplicationEvent event) {
            //此处可以定义多个ApplicationEvent
            if(event instanceof MessageEvent){
                MessageEvent messageEvent = (MessageEvent)event;
                messageEvent.print();
                System.out.println(messageEvent.getSource());
                System.out.println(messageEvent.getText());
            }
        }
    }

    3,事件发布

    package com.example.demo.springEvent;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @Description //TODO 事件发布
     * @Author GaoX
     * @Date 2020/6/29 16:41
     */
    @RestController
    public class MessagePublishEvent {
    
        private ApplicationContext applicationContext;
    
        public MessagePublishEvent(ApplicationContext applicationContext) {
            this.applicationContext = applicationContext;
        }
    
        @GetMapping("/publishEvent")
        public void publishEvent(String s){
            MessageEvent messageEvent = new MessageEvent("测试发送", "test="+s);
            applicationContext.publishEvent(messageEvent);
        }
    
    }

    控制台打印


     

  • 相关阅读:
    固定表头的table
    Object.assign()方法
    一个命令解决linux重启nginx就丢失pid文件问题
    js-xlsx 一个实用的js 导出列表插件
    SparkSQL执行时参数优化
    HSQL转化为MR过程
    简单写下提交sql-map-shuffle-reduce的过程
    order by/sort by/distribute by /cluster by 的区分
    hive中如何控制mapper的数量
    hive 窗口和分析函数功能
  • 原文地址:https://www.cnblogs.com/gaomanito/p/13208860.html
Copyright © 2011-2022 走看看