Java开发框架Spring源码分析

但是我们在使用的过程中 , 应该也会好奇它是怎么运作的 , 今天我们就来探究下 , springboot项目在tomcat中的启动顺序 。
在servlet2.5之前我们都是使用的web.xml配置一个servlet-context , 联合spring的时候 , 我们要手动注册监听器 , 还要注册mvcservlet , 但是servlet3.0之后 。我们的项目中不需要web.xml也可以直接运行 , 因为3.0支持去配置化 。
Java开发框架Spring源码分析
文章图片

文章图片
spring中的启动类HandleType标注的处理类为org.springframework.web.WebApplicationInitizlizer,所以我们编写启动类的时候 , 如果想要能在servlet环境运行的化 , 就需要继承SpringBootServletInitializer , 这样 , 我们的项目就会随着tomcat启动而开始运行了 。
下面我们来研究下SpringBootServletInitializer的启动过程 。
Java开发框架Spring源码分析
文章图片

文章图片
Java开发框架Spring源码分析
文章图片

文章图片
内部其实就一个createRootApplicationContext方法 , 这个启动过程 , 其实也是一个创建SpringApplication的过程 。
期间Spring采用的建造者模式使复杂的创建过程 , 变成一个一个简单对象的创建过程 , 这样看上去代码逻辑更加直观 。
SpringApplicationBuilder创建SpringApplication过程
第一步:创建一个初始状态的SpringApplication对象 , SpringApplication创建的时候 , 先去判断容器是否是Servlet环境 , 且会去META-INF/spring.factories文件里面加载所有的ApplicationContextInitializer.class以及ApplicationListener.class信息并创建
第二步:为容器创建environment , 我们之间讲述的那个能够收集系统环境变量的对象
第三步:为SpringApplication创建ServletContextApplicationContextInitializer , 用来把SpringApplication绑定到ServletContext中 。
第四步:确定SpringApplication中的ApplicationContext实现类 , 默认为注解驱动的AnnotationConfigEmbeddedWebApplicationContext.class的实现 。
第五步:回调启动类中的configure方法 , 我们可以在这个方法里面自定义我们自己的构builder处理逻辑 , 比如设置启动数据源source 。
第六步:完成装配 , 返回SpringApplication对象 。
ApplicationContext的启动过程
Java开发框架Spring源码分析
文章图片

文章图片
其实只要英语好点的人 , 都能直接读出这其中的大抵的步骤 , 所以这个提醒我们 , 在自己平时业务中编写代码的时候 , 取一个好的方法名字的重要性 。
springApplication启动的大致步骤如下 。
Java开发框架Spring源码分析
文章图片

文章图片
图片中有些部分有所省略 , 但是无论从SpringApplication的创建 , 还是ApplicationContext的运行阶段 , 都有大量的回调接口 , 设计模式的开闭原则体现 。
【Java开发框架Spring源码分析】我们用到现在其实体验最好的就是这个去配置化以及注解和资源文件配置 , 后面我们再重点研究下spring的注解加载是怎么运作的~ 。