Spring介绍
# 0.Spring介绍
Spring是Java必学的框架之一,本文就先简单介绍下Spring,大家有个印象即可,看不懂的后面再学。
# Spring是什么
Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为核心,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。
关于什么是IoC和AOP,我们后续会讲。
Spring官网:https://spring.io/ (opens new window)
和Spring有关的项目有很多,这里我们先学Spring Framework,其他Spring相关的框架都是基于Spring Framework的
# Spring的发展历程
简单了解即可。
- 1997 年 IBM 提出了 EJB 的思想
- 1998 年,SUN 制定开发标准规范 EJB1.0
- 1999 年,EJB1.1 发布
- 2001 年,EJB2.0 发布
- 2003 年,EJB2.1 发布
- 2006 年,EJB3.0 发布
EJB是Enterprise Java Beans技术的简称, 又被称为企业Java Beans。可以理解为是一款非常重量级的框架,用起来很繁琐
后来,Rod Johnson(罗德·约翰逊,Spring 之父),做了如下事情:
- 2002年发表了一篇观点:《Expert One-to-One J2EE Design and Development》 阐述了 J2EE 使用 EJB 开发设计的优点及解决方案
- 2003年2月左右,Rod、Juergen Hoeller 和 Yann Caroff 开始合作开发新框架,Yann 为新框架创造了“Spring”的名字。这样Spring项目就诞生了。
- 2004年又发表了一个观点:《Expert One-to-One J2EE Development without EJB》阐述了 J2EE 开发不使用 EJB 的解决方式,并且发布了正式版 Spring 1.0
- 2006年10月,Spring 2.0
- .....
- 2017 年 9 月份发布了 Spring 的最新版本 Spring 5.0 通用版(GA),也是使用率广泛的一个版本
- 2022年11月,Spring6发布,但需要使用Java17以上
# Spring 的优势
这里说下Spring框架的优点(目前有个印象即可):
- 方便解耦,简化开发:通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
- AOP 编程的支持:通过 Spring 的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付。
- 声明式事务的支持:可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量。
- 方便程序的测试:可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。
- 方便集成各种优秀框架:Spring 可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Hessian、Quartz等)的直接支持。
- 降低 JavaEE API 的使用难度:Spring 对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的使用难度大为降低。
- Java 源码是经典学习范例:Spring 的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对 Java 设计模式灵活运用以及对 Java 技术的高深造诣。它的源代码无意是 Java 技术的最佳实践的范例。
# Spring 的体系结构
虽然我们目前都是使用Maven来管理项目,但有时候观察依赖的jar包可以加深我们对Spring的理解。
为了方便共享资料,本项目已将源码上传到GitHub (opens new window)和Gitee (opens new window)上,读者可以去下载相关源码和其他资料。
在Git项目里,有个压缩包:LearnSpring/lib/spring-framework-5.0.2.RELEASE-dist.zip,这个zip包含了Spring Framework的所有jar包、文档和约束文件,解压后有3个文件夹:
- docs文件夹:文档
- libs文件夹:jar文件
- schema文件夹:约束文件
我们解压,并打开这张图片:spring-framework-5.0.2.RELEASE\docs\spring-framework-reference\images\spring-overview.png
我们从下往上看:
- 最后一行是Test部分
- Core Container:核心容器,IoC部分,任何其他部分都是基于它
- 再往上一行就是AOP的部分(含AOP,Aspects,Instrumenttation,Messaging)
- 左上则是数据持久层部分,右上角则是Web相关的部分