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