我们来分析一下在tomcat启动的过程中会创建webServer,在此时会调用onStartup()方法,此时会遍历所有的ServerContextInitializer对象,这个接口的主要作用就是向servlet容器中添加对象。
此时我们继续深入 其会调用selfInitialize方法进行执行,我们看下这个方法的作用
private void selfInitialize(ServletContext servletContext) throws ServletException {
// 1.判断servletContext是否重复初始化
// 2.servletContext 交给ServletWebServerApplicationContext管理的方法
prepareWebApplicationContext(servletContext);
// 1.设置sevletContext的作用域
registerApplicationScope(servletContext);
// 注册servletContext单例到spring容器中
WebApplicationContextUtils.registerEnvironmentBeans(getBeanFactory(), servletContext);
// 获取 ServletContextInitializer 子类,然后依次执行onStartup
for (ServletContextInitializer beans : getServletContextInitializerBeans()) {
beans.onStartup(servletContext);
}
}
之后接着遍历ServletContextInitializer对象中的onStartup()方法
在这里我们可以调用register方法对对象向servlet容器中进行注册
此时我们可以看到通过getFilter()方法可以获取到一个过滤器然后将此过滤器添加到servletContext容器当中 而在getFiliter()方法执行的时候创建了DelegatingFilterProxy对象注意此时的targetName,后面会根据targetName从WebApplicationContext容器中查找
参考文章: