请问监听器是何时添加到 DefaultListableFactory的applicationListeners属性里面的?

来源:7-6 手撕Spring容器的刷新逻辑(下)

Panda_io

2021-02-04

请问老师,getApplicationListeners()返回了监听器列表,请问监听器是何时添加到 DefaultListableFactory的applicationListeners属性里面的?

protected void registerListeners() {
	// 首先注册静态的指定的监听器
	for (ApplicationListener<?> listener : getApplicationListeners()) {
		getApplicationEventMulticaster().addApplicationListener(listener);
	}

	// 不要在这里初始化factorybean:我们需要保留所有未初始化的常规bean(事件监听器),
	// 让后处理器应用到它们!
	String[] listenerBeanNames = getBeanNamesForType(ApplicationListener.class, true, false);
	for (String listenerBeanName : listenerBeanNames) {
		getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);
	}

	// 至此,已经完成将监听器注册到ApplicationEventMulticaster中,
	// 现在我们最终拥有一个多路广播器来发布前期的应用程序事件给监听器.
	Set<ApplicationEvent> earlyEventsToProcess = this.earlyApplicationEvents;
	this.earlyApplicationEvents = null;
	if (earlyEventsToProcess != null) {
		for (ApplicationEvent earlyEvent : earlyEventsToProcess) {
			getApplicationEventMulticaster().multicastEvent(earlyEvent);
		}
	}
}
写回答

1回答

翔仔

2021-02-05

同学好,listener其实就是和系统配置bean一样,在前面初始化基础服务的时候就被加载进来了,和我们后面要讲解的processor是一样的

0
0

剑指Java自研框架,决胜Spring源码

快速入门Spring核心源码+从零开发自研框架

1498 学习 · 495 问题

查看课程