最近在学习spring的源码,学习到了监听器这块,我自定义了监听器,可是没有执行效果,这是为什么?
具体操作如下:
1.自定义了事件
在最后运行spring容器时,Listener是进入了容器,在registerListeners能看到注入进去
spring发布的是ContextRefreshEvent,你监听的是自定义的MyEvent,自然是不会走你的监听器。要不你的监听ApplicationEvent事件看看效果。
getBeanNamesForType(ApplicationListener.class, true, false); 是从beandefine里面找 你的监听器没有加入,加上个注解@Component
你又没监听,或者说发布的又不是你监听的事件
你自定义的MyEvent,如果你想走这个监听器,那么你要把这个对象丢在事件里,你的监听类才能监听到的,如
//业务代码.....
//发送监听事件
xxx.onApplicationEvent(new MyEvent());
跟进去看push方法,你就知道了,他在push的时候,会根据event自己去匹配Listener,
当你监听器监听的是父类事件的时候,这个匹配就是true了,你现在两个类压根就不是父子关系,而是兄弟关系,怎么会走你的监听器,把你的监听器改成监听ApplicationContextEvent,你就能收到一堆消息了