Spring源码分析【3】-SpingWebInitializer的加载
来源:互联网 发布:c语言的缺点 编辑:程序博客网 时间:2024/04/29 07:29
SpingWebInitializer的加载
Spring基于注解的配置代码:
public class SpingWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[]{RootConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[]{WebConfig.class}; } @Override protected String[] getServletMappings() { return new String[]{"/"}; }}
整体调用UML图:
SpringServletContainerInitializer.onStartup传入参数:
类型判断必须是继承WebApplicationInitializer接口:
isAssignableFrom 是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。
通常调用格式是
Class1.isAssignableFrom (Class2)
调用者和参数都是 java.lang.Class 类型。
而 instanceof 是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。
格式是: oo instanceof TypeName
第一个参数是对象实例名,第二个参数是具体的类名或接口名
参考:Class.isAssignableFrom与 instanceof 区别
List<WebApplicationInitializer> initializers:
onStartup()调用链:
AbstractDispatcherServletInitializer 有onStartup()
->AbstractAnnotationConfigDispatcherServletInitializer 无onStartup()
->SpingWebInitializer 无onStartup()
调用父类的AbstractContextLoaderInitializer的onStartup()
调用createRootApplicationContext()
createRootApplicationContext()调用链:
AbstractAnnotationConfigDispatcherServletInitializer有createRootApplicationContext()
->AbstractDispatcherServletInitializer无createRootApplicationContext()
->AbstractContextLoaderInitializer调用createRootApplicationContext()
继承的调用链是逐级往下逐级往上
终于调用到getRootConfigClasses()开始第一阶段
register就是往set集合增加类
public void register(Class<?>... annotatedClasses) {Assert.notEmpty(annotatedClasses, "At least one annotated class must be specified");this.annotatedClasses.addAll(Arrays.asList(annotatedClasses));}
回到registerContextLoaderListener
ContextLoaderListener
ContextLoader
返回ContextLoaderListener
调用tomcat的ApplicationContextFacade implements ServletContext 调用addListener
调用addListener
addApplicationLifecycleListener
applicationLifecycleListenersObjects
newListeners
回到registerContextLoaderListener
完成onStartup
进入registerDispatcherServlet
调用createServletApplicationContext
开始第二阶段进入SpingWebInitializer的getServletConfigClasses
register同第一阶段
回到registerDispatcherServlet
进入tomcat的ApplicationContextFacade addServlet
addServlet
addChild
super.addChild
addChildInternal
children
回到registerDispatcherServlet
第三次进入SpingWebInitializer
回到registerDispatcherServlet
回到onStartup
回到onStartup
退出到Tomcat的StandardContext的startInternal()
entry.getKey()
initializers
- Spring源码分析【3】-SpingWebInitializer的加载
- Spring 加载 *.properties 文件的源码分析
- 【Spring】从源码分析Spring配置文件的加载
- Spring 源码分析:Spring容器的加载过程
- Spring源码分析之Bean的加载流程
- Spring容器加载Bean源码分析
- spring源码分析 加载bean过程
- spring源码分析-配置文件加载过程
- Spring IOC源码分析-自定义标签加载
- 为什么Spring的HibernateTemplate一般情况下不支持数据的惰性加载的源码分析
- 【Spring】Spring的IOC(控制反转)/DI(依赖注入)原理(三):Spring启动加载配置文件源码分析
- spring security3的源码分析
- spring的JdbcTemplate源码分析
- spring源码分析-spring上下文的初始化
- spring启动component-scan类扫描加载过程---源码分析
- spring启动component-scan类扫描加载过程---源码分析
- spring启动component-scan类扫描加载过程---源码分析
- spring启动component-scan类扫描加载过程---源码分析
- [文章摘要] 社会科学和公共政策的空间化和GIS的应用
- 这题90%的专科生都会做错
- Scala Actot(三):设计原则
- ImageLoader加载图片 默认方式和自定义方式
- linux limits.conf实验
- Spring源码分析【3】-SpingWebInitializer的加载
- Android BLE Beacon的探索
- 管理修改
- 如何发现优秀的开源项目?
- socket 通过 ioctl获取 设置 网卡 IP 子网掩码 本地广播地址
- POJ-2251 Dungeon Master
- Storage Options
- postman断言解析
- 热力学与图像处理