zoukankan      html  css  js  c++  java
  • Spring Boot实战笔记(四)-- Spring常用配置(事件Application Event)

    一、事件(Application Event)

      Spring的事件为Bean和Bean之间的消息通信提供了支持。当一个Bean处理完一个任务之后,希望另一个Bean知道并能做相应的处理,这时我们就需要让另一个Bean监听当前Bean所发送的事情。

      Spring的事件需要遵循如下流程:

      (1)自定义事件,集成ApplicationEvent。

      (2)定义事件监听器,实现ApplicationListener。

      (3)使用容器发布事件。

    示例:

      1.自定义事件。

    package com.ecworking.event;
    
    import org.springframework.context.ApplicationEvent;
    
    public class DemoEvent extends ApplicationEvent{
        private static final long serialVersionUID = 1L;
        private String msg;
    
        public DemoEvent(Object source, String msg) {
            super(source);
            this.msg = msg;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    }

      2.事件监听器。

    package com.ecworking.event;
    
    import org.springframework.context.ApplicationListener;
    import org.springframework.stereotype.Component;
    
    @Component
    public class DemoListener implements ApplicationListener<DemoEvent> { //实现ApplicationListener接口,并指定监听的事件类型。
        public void onApplicationEvent(DemoEvent event){ //使用onApplicationEvent方法对消息进行接受处理。
            String msg = event.getMsg();
            System.out.println("bean-demoListener 接收到了 bean-demoPublisher 发布的消息:" + msg);
        }
    }

      3.事件发布类。

    package com.ecworking.event;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.ApplicationContext;
    import org.springframework.stereotype.Component;
    
    @Component
    public class DemoPublisher {
        @Autowired
        ApplicationContext applicationContext; //注入ApplicationContext用来发布事件。
    
        public void publish(String msg){
            applicationContext.publishEvent(new DemoEvent(this, msg)); //使用 ApplcationContext 的 publishEvent 方法来发布。
        }
    }

      4.配置类。

    package com.ecworking.event;
    
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @ComponentScan("com.ecworking.event")
    public class EventConfig {
    }

      5.运行。

    package com.ecworking.event;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class Main {
        public static void main(String[] args) {
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class);
    
            DemoPublisher demoPublisher = context.getBean(DemoPublisher.class);
    
            demoPublisher.publish("hello application event");
    
            context.close();
        }
    }

    运行结果:

  • 相关阅读:
    (8)闭包函数(函数的传参方式)
    (7)名称空间和作用域
    (6)函数嵌套
    (5)函数对象
    (4)进阶函数(作用域、闭包、生成器、迭代器)
    (3)什么是函数(函数的定义、形参、实参、默认形参、可变长函数args kwargs,私有地址)
    (1)三元运算、字符编码
    (2)字符编码关系和转换(bytes类型)
    java技术学习网址收藏
    springmvc工作原理和环境搭建
  • 原文地址:https://www.cnblogs.com/dyppp/p/7581349.html
Copyright © 2011-2022 走看看