• Spring事件发布


    Spring中事件模型的实现。
    事件类:需要继承ApplicationEvent类。
    发送者:需要实现ApplicationEventPublisherAware接口。同时需要托管给容器。
    接受者:需要实现ApplicationListener接口。同时需要托管给容器。

    发送者调用publishEvent发送事件,接受者收到事件后进行处理

    需要注意的是Spring3.0后:

    对于接受者ApplicationListener<E extends ApplicationEvent>,多了泛型,泛型的类型决定了要关注的事件。

    因为发送的事件,所有的接受者都可以收到。现在可以根据泛型进行过滤了。

    如果泛型直接指定为ApplicationEvent,则接收所有事件,包括容器自身的一些事件。

    /**事件 
     * @author ibm
     *
     */
    public class MyEvent extends ApplicationEvent {
    
        public MyEvent(Object source) {/*source为发布者的引用,在发布者内传入this*/
            super(source);
        }
    }
    import org.springframework.context.ApplicationEventPublisher;
    import org.springframework.context.ApplicationEventPublisherAware;
    import org.springframework.stereotype.Component;
    
    /**发送者
     * @author ibm
     *
     */
    @Component
    public class Teacher implements ApplicationEventPublisherAware{
        private ApplicationEventPublisher applicationEventPublisher;
    
        @Override
        public void setApplicationEventPublisher( ApplicationEventPublisher applicationEventPublisher) {
            this.applicationEventPublisher=applicationEventPublisher;
        }
    
        /**发布一个事件
         * @param msg
         */
        public void notifyListener(String msg){
            applicationEventPublisher.publishEvent(new MyEvent(msg));/*这里一般为new MyEvent(this,msg)   MyEvent类应该增加一个构造器MyEvent(Object source,String msg)*/  
        }
        
    }
    import org.springframework.context.ApplicationEvent;
    import org.springframework.context.ApplicationListener;
    import org.springframework.stereotype.Component;
    
    /**事件接受者,泛型为ApplicationEvent则接受所有事件,包括容器自身的事件
     * @author ibm
     *
     */
    @Component
    public class MyListener implements ApplicationListener<ApplicationEvent>{
    
        @Override
        public void onApplicationEvent(ApplicationEvent event) {
            System.out.println("event="+event.getSource());
        }
    }
    import org.springframework.context.support.AbstractApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;public class SpringEventTest {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            AbstractApplicationContext appCtx = new ClassPathXmlApplicationContext("beans.xml");
            Teacher t = (Teacher)appCtx.getBean("teacher");
            t.notifyListener("hello world");//发送一条消息
            appCtx.close();
        }
    }

    配置文件beans.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p" 
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:tx="http://www.springframework.org/schema/tx" 
        xmlns:aop="http://www.springframework.org/schema/aop" 
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/aop   
           http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
        <context:component-scan base-package="com.zk">
        </context:component-scan>
    </beans>
  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/beenupper/p/2797303.html
Copyright © 2020-2023  润新知