• Event事件传递 解耦 look


    Event事件传递 解耦

    spring中创建bean后,我们在完成对一个bean的操作后,我们希望把运行后的bean结果同步传递给另一个bean。

    首先创建一个消息的载体,这个bean需要继承ApplicationEvent类。

    1 自定义事件对象

    我们也可以在这个事件中定义需要传递的信息

    下面我就简单传递一下 演示基本功能

    注意哦 生成对应的get set方法

    /**
     * 用户注册的事件
     * @author : look-word
     * @date : 2022-04-04 20:52
     **/
    public class UserRegisteredEvent extends ApplicationEvent {
    
        private String name;
    
        public UserRegisteredEvent(Object source,String name) {
            super(source);
            this.name=name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    2 创建事件发布类

    执行成功后 发送事件 并携带载体信息

    /**
     * 注册用户
     * @author : look-word
     * @date : 2022-04-04 20:48
     **/
    @Component
    public class Component1 {
        /**
         * 发布事件的对象
         */
        @Autowired
        private ApplicationContext context;
        
        public void register(){
            System.out.println("注册成功");
            // 注册成功 返回的数据
            String name="张三";
            // 发送事件
            context.publishEvent(new UserRegisteredEvent(this,name));
        }
    }
    

    3 创建事件接收类

    用于监听并接收消息载体传递的信息

    这个类可以继承ApplicationListener类

    也可以添加事件监听的注解 @EventListener

    /**
     * 发送短信
     * @author : look-word
     * @date : 2022-04-04 20:48
     **/
    @Component
    public class Component2 {
        @EventListener
        public void aaa(UserRegisteredEvent event){
            String name = event.getName();
            System.out.println("短信成功发送给"+name);
            System.out.println(event);
        }
    }
    

    测试

    @SpringBootApplication
    public class A01Application {
        public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
            ConfigurableApplicationContext context = SpringApplication.run(A01Application.class, args);
            // 发送事件
            context.getBean(Component1.class).register();
        }
    
  • 相关阅读:
    HDOJ 1025 Constructing Roads In JGShining's Kingdom
    HDOJ 1274 展开字符串
    HDOJ 1503 Advanced Fruits
    Codeforces Round #187 (Div. 2) A,B
    HDOJ 1160 FatMouse's Speed
    HDOJ 1267 下沙的沙子有几粒?
    HDOJ 1224 Free DIY Tour
    山娃向大家问好啦。
    开发系统建议
    打开web全屏
  • 原文地址:https://www.cnblogs.com/look-word/p/16100577.html
Copyright © 2020-2023  润新知