ApplicationListener调用过程详解
https://blog.****.net/u014263388/article/details/78996509
ApplicationListener调用过程详解
2018年01月07日 19:07:40
阅读数:4490
ApplicationListener调用过程详解:
实现接口ApplicationListener,并重写public void onApplicationEvent(ApplicationEvent event) {}可以在容器初始话的时候执行这个方法,其中源码为:
具体的源码过程如下:
1、SimpleApplicationEventMulticaster,执行multicastEvent,先获取ApplicationListener集合,然后循环遍历执行ApplicationListener的onApplicationEvent()方法
2、SimpleApplicationEventMulticaster继承自:AbstractApplicationEventMulticaster,AbstractApplicationEventMulticaster里面的成员:
其中获取ApplicationListener的方法为:
3、而调用SimpleApplicationEventMulticaster的方法则为:AbstractApplicationContext的方法:public void publishEvent(ApplicationEvent event)
其中AbstractApplicationContext实现了接口ConfigurableApplicationContext:
4、public void publishEvent(ApplicationEvent event)被AbstractApplicationContext的方法:protected void finishRefresh()调用
5、protected void finishRefresh()则被AbstractApplicationContext的public void refresh()方法调用:
6、AbstractApplicationContext的public void refresh()被ContextLoader的protected WebApplicationContext createWebApplicationContext(ServletContext sc, ApplicationContext parent)调用:
7、ContextLoader的createWebApplicationContext(ServletContext sc, ApplicationContext parent)方法被ContextLoader的public WebApplicationContext initWebApplicationContext(ServletContext servletContext)方法调用:
8、initWebApplicationContext(ServletContext servletContext)方法被ContextLoaderListener的public void contextInitialized(ServletContextEvent event)方法调用:
在启动Web容器时,自动装配Spring applicationContext.xml的配置信息
ContextLoaderListener监听器的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法