码迷,mamicode.com
首页 > 其他好文 > 详细

003 事件专题

时间:2018-05-21 00:02:15      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:ntp   string   监听器   get   地方   [1]   就是   spring   pre   

一 . 概述

  spring为我们提供了事件驱动的编程方式.首先我们就需要了解一下事件的基本概念在  

  spring之中对应的类.

  事件源 : 事件产生的地点,也就是事件发布的地方.

    所有的IOC容器都实现了ApplicationEventPublisher接口,也就是具有容器事件的发布能力.

      因此我们想要发布一个事件,我们只需要使用IOC容器就能发布一个事件.

       事件监听器: 在spring之中,使用ApplicationListener完成事件监听器的创建.

  事件源 : 使用ApplicationEvent完成事件的创建.


 二 .三个核心对象的介绍

[1] 事件源 : 

  我们知道了spring的IOC就能发布事件,因此我们可以使用IOC容器作为事件源.另外使用ApplicationContextAware接口就能

    获取到IOC容器.

[2]事件监听器:

public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {

    void onApplicationEvent(E event);

}

 上面拿到接口之中定义了事件监听器接口,我们如果想要创建一个事件监听器就需要实现这个接口.

同时我们看到了泛型操作,这个泛型描述的就是事件对象.

技术分享图片

我们看到了一个容器刷新的事件,这个事件是我们使用最多的一个事件了.

如果我们想要在容器创建完成之后,使用其中的Bean自动完成某些任务,我们就可以使用这个方式来完成.


 

三 .测试代码 

//创建一个自己的监听器
public class MyListener implements ApplicationListener<ApplicationEvent>{

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        //在这里我们监听了所有的容器事件
        if(event instanceof ContextRefreshedEvent) {
            //此时发出了容器的刷新事件
            if(((ApplicationContextEvent) event).getApplicationContext().getParent() == null) {
                // 为什么要进行这样的判断呢 ? 因为在我们的springmvc和spring整合的时候,会发出两次该事件.
                //我们需要保证必须使spring容器完成之后才能进行事件的响应
                System.out.println("容器刷新了....");
            }
        }
    }
}

创建一个事件监听器.

@Configuration
@Import(MyListener.class)
public class Config {

}
public class MainTest {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
    }
}

我们发现我们运行main方法的时候,会自动的实现事件监听.


 

四 .使用注解完成事件监听

   

003 事件专题

标签:ntp   string   监听器   get   地方   [1]   就是   spring   pre   

原文地址:https://www.cnblogs.com/trekxu/p/9065155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!