一、Spring 八大模块
注意:Spring5 版本之后是 8 个模块,在 Spring5 中新增了 WebFlux 模块
1、Spring Core 模块
这是 Spring 框架最基础的部分,它提供了依赖注入(DependencyInjection)特征来实现容器对 Bean 的管理
核心容器的主要组件是 BeanFactory,BeanFactory 是工厂模式的一个实现,是任何Spring 应用的核心
它使用 IoC 将应用配置和依赖从实际的应用代码中分离出来
2、Spring Context 模块
如果说核心模块中的 BeanFactory 使 Spring 成为容器的话,那么上下文模块就是 Spring 成为框架的原因
这个模块扩展了 BeanFactory,增加了对国际化(I18N)消息、事件传播、验证的支持
另外提供了许多企业服务,例如电子邮件、JNDI 访问、EJB 集成、远程以及时序调度(scheduling)服务
也包括了对模版框架例如 Velocity 和 FreeMarker 集成的支持
3、Spring AOP 模块
Spring 在它的 AOP 模块中提供了对面向切面编程的丰富支持,Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务
通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中,可以自定义拦截器、切点、日志等操作
4、Spring DAO 模块
提供了一个 JDBC 的抽象层和异常层次结构,消除了烦琐的 JDBC 编码和数据库厂商特有的错误代码解析,用于简化 JDBC
5、Spring ORM 模块
Spring 提供了 ORM 模块
Spring 并不试图实现它自己的 ORM 解决方案,而是为几种流行的 ORM 框架提供了集成方案,包括 Hibernate、JDO 和 iBATIS SQL 映射,这些都遵从 Spring 的通用事务和 DAO 异常层次结构
6、Spring Web MVC 模块
Spring 为构建 Web 应用提供了一个功能全面的 MVC 框架
虽然 Spring 可以很容易地与其它 MVC 框架集成,例如 Struts,但 Spring 的 MVC 框架使用 IoC 对控制逻辑和业务对象提供了完全的分离
7、Spring WebFlux 模块
Spring Framework 中包含的原始 Web 框架 Spring Web MVC 是专门为 Servlet API 和 Servlet 容器构建的
反应式堆栈 Web 框架 Spring WebFlux 是在 5.0 版的后期添加的
它是完全非阻塞的,支持反应式流 (Reactive Stream) 背压,并在 Netty,Undertow 和 Servlet 3.1+ 容器等服务器上运行
背压是一个确保消费者不会被来自多个生产商的数据淹没的概念
8、Spring Web 模块
Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文,提供了 Spring 和其它 Web 框架的集成,比如 Struts、WebWork
还提供了一些面向服务支持,例如:实现文件上传的 multipart 请求
二、Spring 的特点
1、轻量
从大小与开销两方面而言 Spring 都是轻量的
完整的 Spring 框架可以在一个大小只有 1 MB 多的 JAR 文件里发布
并且 Spring 所需的处理开销也是微不足道的
Spring 是非侵入式的:Spring 应用中的对象不依赖于 Spring 的特定类
2、控制反转
Spring 通过一种控制反转(IoC)促进了松耦合
当应用了 IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象
可以认为 IoC 与JNDI 相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它
3、面向切面
Spring 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计 auditing 和事务 transaction 管理)进行内聚性的开发
应用对象只实现它们应该做的——完成业务逻辑——仅此而已
它们并不负责其它的系统级关注点,例如日志或事务支持
4、容器
Spring 包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个 bean 如何被创建——基于一个可配置原型 prototype,你的 bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例,以及它们是如何相互关联的
然而,Spring 不应该被混同于传统的重量级的 EJB 容器,它们经常是庞大与笨重的,难以使用
5、框架
Spring 可以将简单的组件配置、组合成为复杂的应用
在 Spring 中,应用对象被声明式地组合,典型地是在一个 XML 文件里
Spring 也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了开发人员
所有 Spring 的这些特征使开发人员能够编写更干净、更可管理、并且更易于测试的代码
它们也为 Spring 中的各种模块提供了基础支持
一 叶 知 秋,奥 妙 玄 心