初识Spring
企业级应用
企业级应用是指那些为商业组织、⼤型企业而创建并部署的解决⽅案及应用。这些⼤型的企业级应用结构复
杂、涉及的外部资源众多,事务密集,数据规模⼤,用户数量多,有较强的安全性考虑和较⾼的性能要求。
当代的企业级应用绝不可能是⼀个个的独⽴系统。在企业中⼀般都会部署多个进⾏交互的应用。同时,这些应
用⼜都有可能与其他企业的相关应用连接。从而构成⼀个结构复杂,跨越Internet的分布式企业应用集群。
此外,作为企业级应用不但要有强⼤的功能。还要能够满⾜未来业务需求的变化,易于扩展和维护。
传统 Java EE 解决企业级应用问题时的"重量级"架构体系,使它的开发效率,开发难度和实际的性能,都令⼈
失望,Spring 以⼀个"救世主"的形象出现在⼴⼤的Java程序员⾯前。
Spring概述
Spring是什么
Spring 是最受欢迎的企业级 Java 应⽤程序开发框架,数以百万的来⾃世界各地的开发⼈员使⽤ Spring 框架来创建性能好、易于测试、可重⽤的代码。
Spring 框架是⼀个开源的 Java 平台,它最初是由 Rod Johnson(Spring之⽗) 编写的,并且于 2003 年 6 ⽉⾸次在 Apache 2.0 许可下发布。
Spring 是轻量级的框架,其基础版本只有 2 MB 左右的⼤⼩。
Spring 框架的核⼼特性是可以⽤于开发任何 Java 应⽤程序,但是在 Java EE 平台上构建 web 应⽤程序是需要扩展的。 Spring 框架的⽬标是使 Java EE 开发变得更容易使⽤,通过启⽤基于 POJO 编程模型来促进良好的编程实
践。
Spring致⼒于 JavaEE 应⽤的各种解决⽅案。⽽不是仅仅专注于某⼀层的⽅案。可以说,spring是企业应⽤开发的⼀站式选择。Spring贯穿表现层,业务层,持久层。然⽽,spring并不想取代那些已有的框架。⽽是以⾼度的开放性与他们⽆缝整合。
Spring有两个主要⽬标:⼀是让现有技术更易于使⽤,⼆是促进良好的编程习惯(最佳实践)
Spring的优势
1. 轻量级框架
Spring是⼀个轻量级框架,⼤⼤的简化了Java企业级开发。提供了强⼤、稳定的功能。
Spring是⼀个全⾯的解决⽅案,已经有较好解决⽅案的领域,Spring绝不做重复性的实现,例如:对象持久化和 ORM ,Spring只是对现有的 JDBC , MyBatis , Hibernate 等技术提供⽀持,使之更加易⽤,⽽不是重新做⼀个实现。
2. ⽅便解耦,简化开发
通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进⾏控制,避免硬编码所造成的过度程序耦合。⽤户也不必再为单例模式类、属性⽂件解析等这些底层的需求编写代码,可以更专注于上层的应⽤。
3. AOP 编程的⽀持
通过 Spring 的 AOP 功能,⽅便进⾏⾯向切⾯的编程,许多不容易⽤传统 OOP 实现的功能可以通过 AOP 轻
松应付。
4. 声明式事务的⽀持
可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式⽅式灵活的进⾏事务的管理,提⾼开发效率和质量。
5. ⽅便程序的测试
可以⽤⾮容器依赖的编程⽅式进⾏⼏乎所有的测试⼯作,测试不再是昂贵的操作,⽽是随⼿可做的事情。
6. ⽅便集成各种优秀框架
Spring 可以降低各种框架的使⽤难度,提供了对各种优秀框架( Struts、 Hibernate、 Hessian、 Quartz
等)的直接⽀持。
7. 降低 JavaEE API 的使⽤难度
Spring 对 JavaEE API (如 JDBC 、 JavaMail 、 远程调⽤ 等)进⾏了薄薄的封装层,使这些 API 的使⽤难度⼤为降低。
8. Java 源码是经典学习范例
Spring 的源代码设计精妙、结构清晰、匠⼼独⽤,处处体现着⼤师对 Java 设计模式灵活运⽤以及对 Java 技术的⾼深造诣。它的源代码⽆意是 Java 技术的最佳实践的范例。
Spring的体系结构
Spring 框架由⼤约20个功能模块组成。这些模块被分为六个部分。分别是 Core Container , Data
Access/Integration , Web , AOP , Instrumentation 及 Test 。
Core Container(Spring的核心容器)
Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 SpEL 表达式语言模块组成,没有这些核心容器,也不可能有 AOP、Web 等上层的功能。具体介绍如下。
Beans 模块:提供了框架的基础部分,包括控制反转和依赖注入。
Core 核心模块:封装了 Spring 框架的底层部分,包括资源访问、类型转换及一些常用工具类。
Context 上下文模块:建立在 Core 和 Beans 模块的基础之上,集成 Beans 模块功能并添加资源绑定、数据验证、国际化、Java EE 支持、容器生命周期、事件传播等。ApplicationContext 接口是上下文模块的焦点。
SpEL 模块:提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从 Spring 容器获取 Bean,它也支持列表投影、选择和一般的列表聚合等。
Data Access/Integration(数据访问/集成)
数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。
JDBC 模块:提供了一个 JDBC 的样例模板,使用这些模板能消除传统冗长的 JDBC 编码还有必须的事务控制,而且能享受到 Spring 管理事务的好处。
ORM 模块:提供与流行的“对象-关系”映射框架无缝集成的 API,包括 JPA、JDO、Hibernate 和 MyBatis 等。而且还可以使用 Spring 事务管理,无需额外控制事务。
OXM 模块:提供了一个支持 Object /XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。将 Java 对象映射成 XML 数据,或者将XML 数据映射成 Java 对象。
JMS 模块:指 Java 消息服务,提供一套 “消息生产者、消息消费者”模板用于更加简单的使用 JMS,JMS 用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
Transactions 事务模块:支持编程和声明式事务管理。
Web模块
Spring 的 Web 层包括 Web、Servlet、WebSocket 和 Webflux 组件,具体介绍如下。
Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IOC 容器初始化以及 Web 应用上下文。
Servlet 模块:提供了一个 Spring MVC Web 框架实现。Spring MVC 框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的 JSP 标签,完全无缝与 Spring 其他技术协作。
WebSocket 模块:提供了简单的接口,用户只要实现响应的接口就可以快速的搭建 WebSocket Server,从而实现双向通讯。
Webflux 模块: Spring WebFlux 是 Spring Framework 5.x中引入的新的响应式web框架。与Spring MVC不同,它不需要Servlet API,是完全异步且非阻塞的,并且通过Reactor项目实现了Reactive Streams规范。Spring WebFlux 用于创建基于事件循环执行模型的完全异步且非阻塞的应用程序。
此外Spring4.x中还有Portlet 模块,在Spring 5.x中已经移除
Portlet 模块:提供了在 Portlet 环境中使用 MVC 实现,类似 Web-Servlet 模块的功能。
AOP、Aspects、Instrumentation和Messaging
在 Core Container 之上是 AOP、Aspects 等模块,具体介绍如下:
AOP 模块:提供了面向切面编程实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中,这样各司其职,降低业务逻辑和通用功能的耦合。
Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。
Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
messaging 模块:Spring 4.0 以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。
jcl 模块: Spring 5.x中新增了日志框架集成的模块。
Test模块
Test 模块:Spring 支持 Junit 和 TestNG 测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。
包含Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient。
Spring 的官方项目和教程
官方的项目和教程,地址在这里在新窗口打开,在学习Spring时,一定要把它当做生态体系,而是不是一个简单的开发框架。
Spring 的归档文档
官方提供了系统性的文档的FTP,你可以在这里在新窗口打开找到所有历史版本的PDF/HTML版本。
Spring 的官方Github
Spring官方的GitHub在这里在新窗口打开,它包含着Spring-framework的源码,如果你感兴趣,可以从这里clone代码进行阅读。