spring监听器失效的问题

最近在学习spring的源码,学习到了监听器这块,我自定义了监听器,可是没有执行效果,这是为什么?
具体操作如下:
1.自定义了事件

img


2.自定义监听器

img


3.将Listener注入到bean中

img

在最后运行spring容器时,Listener是进入了容器,在registerListeners能看到注入进去

img


但是在发布时却没有这个Listener,是什么原因

img

spring发布的是ContextRefreshEvent,你监听的是自定义的MyEvent,自然是不会走你的监听器。要不你的监听ApplicationEvent事件看看效果。

getBeanNamesForType(ApplicationListener.class, true, false); 是从beandefine里面找 你的监听器没有加入,加上个注解@Component

你又没监听,或者说发布的又不是你监听的事件

你自定义的MyEvent,如果你想走这个监听器,那么你要把这个对象丢在事件里,你的监听类才能监听到的,如
//业务代码.....
//发送监听事件
xxx.onApplicationEvent(new MyEvent());

跟进去看push方法,你就知道了,他在push的时候,会根据event自己去匹配Listener,

img


img


img


img

当你监听器监听的是父类事件的时候,这个匹配就是true了,你现在两个类压根就不是父子关系,而是兄弟关系,怎么会走你的监听器,把你的监听器改成监听ApplicationContextEvent,你就能收到一堆消息了