1.1 Spring 框架概述
1.1.1 Spring 的进化
第一阶段:Spring 1.x 基于XML的配置
第二阶段:Spring 2.x 基于注解的配置
第三阶段:Spring 3.x 基于XML的配置
第四阶段:Spring 4.x+Spring Boot基于自动配置
1.1.2 Spring 的功能
spring框架提供了IOC与AOP两大核心功能,及控制反转和面向切面编程。
1.控制反转
控制反转就是把各类的管理控制权交给容器,当需要使用某个类时,容器会自动管理该类实例并交给使用方使用,管理策略为,如果容器中无此类实例则自动创建实例并保存在容器中,如果你存在实例则直接获取该实例,对于使用方而言只需声明需要依赖的类,即可被自动注入,例如当A类需要使用B类实例时,只需要在A类中声明需要B类,框架就会自动将B类实例注入到A类中,以此实现各类之间的解耦,降低系统的复杂度。
举一个简单的例子,在某市内原本没有餐厅,想吃什么饭,只能自己准备材料自己做,每顿饭都需要耗费大量的时间后来开了家餐厅,想吃什么直接通过餐厅点餐即可,从而节省了食材准备烹饪几次后打扫的时间,这样就有更多的时间来做更多的事。
2.面向切面编程
例如需要在服务层的调用之前记录日志监控调用的情况,面向切面编程就是只对某一层进行纵切,在这一层的界面上添加各种公用逻辑,最终的目标是去除容易的代码达到逻辑复用的目的。
再举一个简单的例子在某市内有一家餐厅在餐厅创立初期,餐厅的门是手动门,每一位进入餐厅的客人都需要手动推开门,而在离开餐厅时还需要手动拉开门,后来餐厅进行了一次升级,手动门改成了自动门,门自动感应客人的进出并自动开关,客人感觉不到门的存在带来了极大的便利,这就类似于面向切面的结构,客人和餐厅是两层逻辑单元,原本上层的客人要调用下层的餐厅都需要先执行开门动作,而在两层的切面门上加上自动机制,可以自动在两层调用之间加入统一的逻辑,大大的简化的开发。
控制反转:实现各个模块之间的解耦,降低各模块的耦合度
面向切面编程:为某一层添加统一功能,减少代码的冗余
1.1.3 Spring 的模块
1.核心容器(Core Container)
spring-core: 提供 Spring 框架的核心支持,包括各种工具包与基本注解, 大多数其他模块都需要引入核心模块。
spring-beans: 提供 Spring 框架对Bean 生命周期相关的支持, 包括 BeanFactory 等组件。
spring-context: 提供Spring 上下文支持, 包括Applic-ationContext等组件
spring-expression: 提供 SpEL 表达式支持
2.AOP
为Spring 提供面向切面编程的支持, 包括ProxyFactory代理工厂等组件。
3.Web应用模块
spring-web: 提供对Web应用的支持, 用于 Web容器整合Spring框架,如Tomcat等。
spring-websocket: 提供对 WebSocket协议的相关支持。
spring-webmvc: 提供MVC框架, 与Spring框架无缝整合, 并结合spring-web为基于 Servlet容器的 Web应用提供MVC 支持。
spring-webflux: 为 Spring 提供基于 Reactive 响应式编程的 Web 框架。不同于spring-webmvc 基于 Servlet容器, spring-webflux 一般基于 Netty 等异步网络框架, 打破了原有Servlet的统治地位
4.数据访问集成(Data Access/Integration)
spring-jdbc: 提供对 JDBC 相关数据库操作的支持。
spring-tx: 提供对事务相关的支持。
spring-orm: 提供对对象关系映射的支持。
spring-oxm: 提供对对象 XML 实体映射的支持。
5.Messaging
为Spring提供各种消息队列支持,包括ActiveMQ、Kafka等消息组件支持的核心。
6.Test
提供Spring框架测试组件相关支持。