Spring前言
在学习Spring时,一定要把它当做生态体系,而是不是一个简单的开发框架。
什么是Spring?
百度百科中对Spring进行了如下解释:
Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。
EJB、J2EE、Spring三者的关系?
这里就需要提到EJB了,不知道大家有没有这样一个疑问,就是EJB,J2EE以及Spring这三者的关系?
首先来说下EJB,这个玩意儿字面全称是Enterprise JavaBean,中文意思是企业级JavaBean。JavaBean最开始是客户端的组件类,而随着web应用和服务器端应用的发展需要而诞生出了EJB这个技术,我们应用中的业务交给EJB中的一个个Bean去处理。
而JavaEE是J2EE的更新叫法,是用于企业级应用开发的规范和技术,本质是用于企业级应用开发的框架和API,如JSP、Servlet、EJB、JDBC、JNDI等等。使用这些JavaEE的API就能进行企业级应用的开发了,并且JavaEE是由Java官方推出的。EJB和JavaEE的关系是EJB属于JavaEE下的一员,是JavaEE众多技术中的一项。
最后来说下Spring,Spring的初衷是为了取代EJB,成为继EJB之后开发效率更高,性能更好,更轻量级的开发框架。
但从关系上讲Spring是引用JavaEE的而不属于JavaEE,或者说Spring是JavaEE的封装,封装了众多JavaEE技术的API,让JavaEE的原生API更加容易被使用,让开发更加简单。
Spring的好处
由于本人没有使用过EJB进行开发,以下内容请谨慎食用。
对于EJB缺点的描述也仅针对EJB 2.0。
首先我们需要了解的是EJB存在哪些问题:
-
除了Web容器外,还需要一个单独的EJB容器。
-
EJB组件的接口和类必须继承指定接口或类。
-
需要大量使用XML配置文件。
-
EJB组件必须打包成jar包。
-
EJB太过笨重,且学习成本高。
正是因为EJB以上的问题,Spring于2003年应运而生,作为J2EE的补充,并且成功取代了其中的EJB,那Spring给我们带来了哪些好处?
-
非侵入式设计
-
方便解耦、简化开发
-
支持AOP
-
支持声明式事务
-
方便程序的测试
-
方便集成各种优秀的框架
-
降低J2EE API的使用难度
综上来看Spring确实是一个不错的选择。
Spring概述
历史版本演变
截至目前Spring已经推出到了Spring 5.x,我简单整理了一下每个版本的发展历程。
-
Spring 1.x
仅支持xml配置。
-
Spring 2.x
支持了基于注解的配置。
-
Spring 3.x
支持了基于Java类的配置。
推出Spring表达式语言,SpElS。 -
Spring 4.x
支持Lambda表达式。
提供了对@Scheduled和@PropertySource重复注解的支持。
提供了空指针终结者Optional。
...... -
Spring 5.x
测试改进。
WebFlux函数式编程。
......
Spring组件架构

核心
| 模块名称 | 主要功能 |
|---|---|
| spring-core | 依赖注入IOC与DI的最基本实现。 |
| spring-beans | Bean工厂与Bean的装配。 |
| spring-context | 定义基础的Spring的Context上下文即IOC容器。 |
| spring-context-support | 对Spring IOC容器的拓展支持,以及IOC子容器。 |
| spring-context-indexer | Spring的类管理组件和Classpath扫描。 |
| spring-expression | Spring表达式语言。 |
切面
| 模块名称 | 主要功能 |
|---|---|
| spring-aop | 面向切面编程的应用模块,整合Asm,CGLib,JDKProxy。 |
| spring-aspects | 集成AspectJ,AOP应用框架。 |
| spring-instrument | 动态Class Loading。 |
数据访问与集成
| 模块名称 | 主要功能 |
|---|---|
| spring-jdbc | Spring提供的JDBC抽象框架的主要实现模块,用于简化Spring JDBC操作。 |
| spring-tx | Spring JDBC事务控制实现模块。 |
| spring-orm | 主要集成Hibernate,JPA和JDO。 |
| spring-oxm | 将Java对象映射成XML数据,或者将XML数据映射成Java对象。 |
| spring-jms | Java Messaging Service能够发送和接受消息。 |
web
| 模块名称 | 主要功能 |
|---|---|
| spring-web | 提供了最基础的Web支持,主要建立于核心容器之上,通过Servlet或者Listeners来初始化IOC容器。 |
| spring-webmvc | 实现了Spring MVC的Web应用。 |
| spring-websocket | 主要是与Web前端的双全工通讯的协议。 |
| spring-webflux | 一个新的非阻塞函数式Reactive Web框架,可以用来建立异步的,非阻塞,事件驱动的服务。 |
通信报文
| 模块名称 | 主要功能 |
|---|---|
| spring-messaging | 从Spring 4开始新加入的一个模块,主要职责是为Spring框架集成一些基础的报文传送应用。 |
集成测试
| 模块名称 | 主要功能 |
|---|---|
| spring-test | 主要为测试提供支持。 |
集成兼容
| 模块名称 | 主要功能 |
|---|---|
| spring-framework-bom | 解决Spring的不同模块依赖版本不同问题。 |
各模块间的依赖关系

小结
关于历史版本演变和Spring组件架构这两节的叙述仅仅是为了让大家对Spring能有一个更全面的了解。希望对大家后续的学习能有所帮助。
学习资料
下面给出的是Spring官方的学习资料

浙公网安备 33010602011771号