spring监听器源码解析
2025-02-08 16:23:00 1 举报
spring
作者其他创作
大纲/内容
1.创建多播器
实现类:EventPublishingRunListener
广播事件(new ApplicationStartingEvent(
\"META-INF/spring.factories
实例化方法
preInstantiateSingletons()这个方法的最后一行,会调用
SpringApplicationRunListener.class
refresh()中的registerListeners()方法里面
SimpleApplicationEventMulticaster
SpringApplication
DefaultListenerRetriever
第一步,在spring容器刷新的时候,创建一个事件多播器,默认是SimpleApplicationEventMulticaster
1、静态添加2、从beanDefination中获取类型是ApplicationListener.class的bean的名称(注意是名称)3、处理早期的监听器集合
注解的处理,先准备工作是
调用这个地方的时机1、开启注解2、注解类启动spring
Set<ApplicationListener<?>> applicationListeners
1、监听器的创建分两种, 注解@EventListener(class) 实现接口ApplicationListener<E extends ApplicationEvent>
ApplicationListener.class
EventListenerMethodProcessor实现接口SmartInitializingSingleton
监听相关的
SpringApplicationRunListeners
2.注册监听器
调用上面的监听类的postProcessAfterInitialization
refresh()中的initApplicationEventMulticaster()方法
<T> Collection<T> getSpringFactoriesInstances(Class<T> type)
spring的SPI机制
refreah()中prepareBeanFactory()
执行starting()理解这个start的含义,是容器启动的意思,不是执行所有的监听器
org.springframework.context.annotation.AnnotationConfigUtils#registerAnnotationConfigProcessors()
........beanFactory.addBeanPostProcessor(new ApplicationListenerDetector(this));........
创建SimpleApplicationEventMulticaster多播器把容器内的监听器listeners变量的数据,注册到这个里面
ApplicationContextInitializer.class
处理自定义接口的实现类
initializerslisteners
0 条评论
下一页