ApplicationListener调用过程详解

ApplicationListener调用过程详解:
实现接口ApplicationListener,并重写public void onApplicationEvent(ApplicationEvent event) {}可以在容器初始话的时候执行这个方法,其中源码为:
ApplicationListener调用过程详解

具体的源码过程如下:
1、SimpleApplicationEventMulticaster,执行multicastEvent,先获取ApplicationListener集合,然后循环遍历执行ApplicationListener的onApplicationEvent()方法
ApplicationListener调用过程详解

2、SimpleApplicationEventMulticaster继承自:AbstractApplicationEventMulticaster,AbstractApplicationEventMulticaster里面的成员:
ApplicationListener调用过程详解
其中获取ApplicationListener的方法为:
ApplicationListener调用过程详解
ApplicationListener调用过程详解


3、而调用SimpleApplicationEventMulticaster的方法则为:AbstractApplicationContext的方法:public void publishEvent(ApplicationEvent event)
ApplicationListener调用过程详解
其中AbstractApplicationContext实现了接口ConfigurableApplicationContext:
ApplicationListener调用过程详解

4、public void publishEvent(ApplicationEvent event)被AbstractApplicationContext的方法:protected void finishRefresh()调用
ApplicationListener调用过程详解

5、protected void finishRefresh()则被AbstractApplicationContext的public void refresh()方法调用:
ApplicationListener调用过程详解

6、AbstractApplicationContext的public void refresh()被ContextLoader的protected WebApplicationContext createWebApplicationContext(ServletContext sc, ApplicationContext parent)调用:
ApplicationListener调用过程详解

7、ContextLoader的createWebApplicationContext(ServletContext sc, ApplicationContext parent)方法被ContextLoader的public WebApplicationContext initWebApplicationContext(ServletContext servletContext)方法调用:
ApplicationListener调用过程详解

8、initWebApplicationContext(ServletContext servletContext)方法被ContextLoaderListener的public void contextInitialized(ServletContextEvent event)方法调用:
ApplicationListener调用过程详解


在启动Web容器时,自动装配Spring applicationContext.xml的配置信息
ContextLoaderListener监听器的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法