先看一组继承关系:
ContextLoaderListener实现了ServletContextListener接口,了解过servlet的朋友都知道这个接口用来监听容器的初始化和销毁 所以在ContextLoaderListener实现了这个接口后,他就有了监听容器启动和销毁的功能,就可以在需要的时候加载一些特定的数据;比如配置文件
public class ContextLoaderListener extends ContextLoader implements ServletContextListener
以前在web.xml中我们都是手动的加载当前监听类,并且传入自己的配置文件如下:
但是现在是容器自己给我们加载,加载的流程如下:(JavaConfig方式配置)
当服务器启动的时候因为ContextLoaderListener实现了ServletContextListener 接口, 所以ContextLoaderListener类就可以监听容器的初始化(启动),即在服务器启动时提前加载需要的配置文件,所以当在服务器启动时: 接口WebApplicationInitializer下的诸多实现类
通过一系列的方法在服务器启动时就创建好了ContextLoaderListener监听器,以及将我们自己实现的DispactherServletConfig类(主配置类)中重写的getRootConfigClasses()方法传入的配置文件加入到当前监听器中(也可以说是ContextLoader);加载配置整个过程由ContextLoader类来实现
具体方法执行细则如下:
注:上图是加载监听器执行方法的顺序,(不一定在同一个类中,部分在其子类中重写)
2.加载过滤器
过滤器均是tomcat中 Filter 的实现类, 由DispactherServletConfig自己实现的主配置类通过onStartup方法(在服务器启动前就执行)中加入自己配置的监听器( Filter 的实现类),在服务器启动前执行;
由AbstractDispatcherServletInitializer类中的registerDispatcherServlet方法将自己配置的过滤器添加到servletContext容器中,最终交由servlet加载。
细节注释都在图片中了,如果有错误的还希望大佬指正。难免会有出错的地方!
感谢阅读!!!