版权声明:本文为博主原创文章,遵循 CC 4.0 BY版权协议,转载请附上原文出处链接和本声明。
有情怀,有干货,微信搜索【三太子敖丙】关注这个不一样的程序员。
本文GitHubhttps://github.com/JavaFamily 已收录,有一线大厂面试完整考点、资料以及我的系列文章。
这几天不是生病嘛,周一我还是没好转请假了,也难受睡不着,索性我就直接看看书,看完就小小总结了一下Spring的相关东西,这篇是第一篇,其他的等我好点继续肝一下。
Spring Framework 是Java 语言中影响最为深远的框架之一,其中的 IOC 和AOP 两个经典思想更是一直被程序员津津乐道,后面推出的 Spring Boot、Spring Cloud 系列也是在其基础之上开发,要想搞明白 Spring 全家桶系列,必须脚踏实地的从 Spring Framework 学习起。
本篇文章是 Spring Framework 源码解析系列的第一篇,主要是从代码层面对 Spring 框架的启动做一个完整解析,这里的思想都是笔者根据自己使用 Spring 的经验和对 Spring 的了解综合而成,以下内容谨代表个人看法,若有疑问请不吝赐教。
另外提醒一下,本篇文章是基于 5.1.6.RELEASE 版本的代码进行分析,入口代码也是采用官方推荐的 java-config 技术,而非 xml。
源码解析
考虑到直接看源码是一个非常枯燥无味的过程,而且 Spring 的代码设计非常优秀规范,这会导致在翻开源码时,类与类之间的跳跃会非常频繁,不熟悉的同学可能直接晕菜,所以每一个重要流程前我都会先准备一个流程图,建议大家先通过流程图了解一下整体步骤,然后再对代码硬撸,这样能够降低不少难度。
相信每一个使用过 Spring 技术的同学都知道 Spring 在初始化过程中有一个非常重要的步骤,即Spring 容器的刷新,这个步骤固然重要,但是刷新前的初始化流程也非常重要。本篇文章将整个启动过程分为了两个部分,即容器的初始化与刷新,下面正式开始。
初始化流程
流程分析
因为是基于 java-config 技术分析源码,所以这里的入口是AnnotationConfigApplicationContext,如果是使用 xml