美文网首页
spring -boot 监听事件运行原理

spring -boot 监听事件运行原理

作者: 小河土 | 来源:发表于2018-06-18 23:36 被阅读0次

    关于spring boot 的运行原理

       1. 首先要有一个事件 这个事件是要继承 ApplicationEvent 这个类的.

    2.然后就是监听事件,这个类要实现ApplicationListener 

    3.然后就是把事件加入到ApplicationContext 里面 也就是    

    1.(还可以通过可以在自定义类上的监听器 加上@Component注解)这一种是把监听器放入spring容器里面管理

    2.(还有可以通过在properties 文件里面配置 context.linstener.classes=”监听器的全类名“)

    3.(还可以通过@EventListener 注解在方法上,这个方法的param的类型必须是ApplicationEvent的子类)这一种我觉得是最方便的。    

    当然这个还是有其他方法

    4.然后就是发布这个事件。通过ApplicationContext的pulishEvent方法


    这样一个简单的事件监听就完了。

    (1)我们简单的来看下context.linstener.classes 这种的实现原理,这种的是实现就要看DelegatingApplicationListener

    这个类了。

    DelegatingApplicationListener 这个类实现了ApplicationListener<ApplicationEvent> 这个类,然后ApplicationListener<ApplicationEvent> 继承这个类。

    我们是主要看DelegatingApplicationListener 这个类里面的onApplicationEvent这个方法就可以的。


    这里首先会判断是不是ApplicationEnvironmentPreparedEvent这个类型,如果是这个类型才开始里面的逻辑getListeners() 方法 就是获得所有这个类型事件的监听器。

    如果这个类型的监听器为空,那么就直接返回。

    然后创建一个简单的广播事件SimpleApplicationEventMulticaster对象把所有的监听器加到里面。

    最后就是进行广播事件。

    ApplicationEnvironmentPreparedEvent 这个类是继承了SpringApplicationEvent然后 SpringApplicationEvent又继承了ApplicationEvent这个类。

    (2)下面我们来看看@EventListener 注解这种实现的原理

    这个我们就要参考EventListenerMethodProcessor这个类的afterSingletonsInstantiated()方法里面的processBean() 方法,


    这个方法里面我们主要看这一断逻辑

    在这里它是把所有的ApplicationListener加入到ApplicationListener

    相关文章

      网友评论

          本文标题:spring -boot 监听事件运行原理

          本文链接:https://www.haomeiwen.com/subject/ghdoeftx.html