1.1. Spring源码入门
参考文档《https://spring.io/projects/spring-framework》
1.1.1. Spring框架概述
Spring框架为现代基于java的企业应用程序提供了一个全面的编程和配置模型——适用于任何类型的部署平台。
Spring的一个关键元素是应用程序级别的基础设施支持:Spring关注企业应用程序的“管道”,因此团队可以关注应用程序级别的业务逻辑,而不必与特定的部署环境建立不必要的联系。
1.1.2. Spring框架特性
1.1.2.1. 核心技术
依赖注入,事件,资源,i18n,验证,数据绑定,类型转换,SpEL, AOP。
1.1.2.2. 测试
模拟对象,TestContext框架,Spring MVC测试,WebTestClient
1.1.2.3. 数据访问
事务、DAO支持、JDBC、ORM、编组XML。
1.1.2.4. Spring mvc或Spring WebFlux
Web框架
1.1.2.5. 整合
路由,JMS, JCA, JMX,电子邮件,任务,调度,缓存。
1.1.2.6. 语言
Kotlin, Groovy, dynamic languages.
1.1.3. Spring框架的前世今生
Spring 框架除了帮我们管理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我管理最头疼的数据库事务,本身提供了一套简单的JDBC 访问实现,提供与第三方数据访问框架集成(如Hibernate、JPA),与各种Java EE 技术整合(如Java Mail、任务调度等等),提供一套自己的Web 层框架Spring MVC、而且还能非常简单的与第三方Web 框架集成。从这里我们可以认为Spring 是一个超级粘合大平台,除了自己提供功能外,还提供粘合其他技术和框架的能力,从而使我们可以更自由的选择到底使用什么技术进行开发。
1.1.3.1. Spring的前世今生
1.1.3.1.1. 一切从Bean开始
1.1.3.1.2. Spring的设计初衷
采取了4 个关键策略:
1、基于POJO 的轻量级和最小侵入性编程;
2、通过依赖注入和面向接口松耦合;
3、基于切面和惯性进行声明式编程;
4、通过切面和模板减少样板式代码;
而他主要是通过:面向Bean(BOP)、依赖注入(DI)以及面向切面(AOP)这三种方式来达成的。
1.1.3.1.3. BOP编程伊始
Spring 提供了IOC 容器通过配置文件或者注解的方式来管理对象之间的依赖关系。
控制反转(其中最常见的实现方式叫做依赖注入(Dependency Injection,DI)。
她的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器(在Spring 框架中是IOC 容器)负责将这些联系在一起。
1.1.3.1.4. 依赖注入的基本概念
Spring 设计的核心org.springframework.beans 包(架构核心是org.springframework.core
包),它的设计目标是与JavaBean 组件一起使用。最高级抽象是BeanFactory 接口,它是工厂设计模式的实现,允许通过名称创建和检索对象。BeanFactory 也可以管理对象之间的关系。BeanFactory 最底层支持两个对象模型。
1,单例:提供了具有特定名称的全局共享实例对象,可以在查询时对其进行检索。Singleton 是默认的也是最常用的对象模型。
2,原型:确保每次检索都会创建单独的实例对象。在每个用户都需要自己的对象时,采用原型模式。Bean 工厂的概念是Spring 作为IOC 容器的基础。IOC 则将处理事情的责任从应用程序代码转移到框架。
1.1.3.1.5. AOP编程理念
面向切面编程,即AOP,是一种编程思想,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面(切面),它将那些影响多个类的行为封装到可重用的模块中。
AOP 编程的常用场景有:Authentication(权限认证)、Auto Caching(自动缓存处理)、Error Handling(统一错误处理)、Debugging(调试信息输出)、Logging(日志记录)、Transactions(事务处理)
等。
1.1.3.2. Spring5系统框架
1.1.3.2.1. 核心容器
由spring-beans、spring-core、spring-context 和spring-expression(Spring Expression Language,SpEL) 4 个模块组成。
spring-core 和spring-beans 模块是Spring 框架的核心模块,包含了控制反转(Inversion ofControl, IOC)和依赖注入(Dependency Injection, DI)。BeanFactory 接口是Spring 框架中的核心接口,它是工厂模式的具体实现。BeanFactory 使用控制反转对应用程序的配置和依赖性规范与实际的应用程序代码进行了分离。但BeanFactory 容器实例化后并不会自动实例化Bean,只有当Bean 被使用时BeanFactory 容器才会对该Bean 进行实例化与依赖关系的装配。
spring-context 模块构架于核心模块之上,他扩展了BeanFactory,为她添加了Bean 生命周期控制、框架事件体系以及资源加载透明化等功能。此外该模块还提供了许多企业级支持,如邮件访问、远程访问、任务调度等,ApplicationContext 是该模块的核心接口,她的超类是BeanFactory。与BeanFactory 不同,ApplicationContext 容器实例化后会自动对所有的单实例Bean 进行实例化与依赖关系的装配,使之处于待用状态。
spring-context-support 模块是对Spring IOC 容器的扩展支持,以及IOC 子容器。
1.1.3.2.2. AOP和设备支持
由spring-aop、spring-aspects 和spring-instrument 3 个模块组成。
1.1.3.2.3. 数据访问与集成
由spring-jdbc、spring-tx、spring-orm、spring-jms 和spring-oxm 5 个模块组成。
1.1.3.2.4. Web组件
由spring-web、spring-webmvc、spring-websocket 和spring-webflux 4 个模块组成。
1.1.3.2.5. 通信报文
即spring-messaging 模块,是从Spring4 开始新加入的一个模块,主要职责是为Spring 框架集成一些基础的报文传送应用。
1.1.3.2.6. 集成测试
1.1.3.2.7. 集成兼容
1.1.3.2.8. 各模块之间的依赖关系
接下来的课程中,我们将深入了解Spring 的核心模块功能。基本学习顺序为:从spring-core 入手,其次是spring-beans 和spring-aop,随后是spring-context,再其次是spring-tx 和spring-orm,最后是spring-web 和其他部分。