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存在哪些问题:

  1. 除了Web容器外,还需要一个单独的EJB容器。

  2. EJB组件的接口和类必须继承指定接口或类。

  3. 需要大量使用XML配置文件。

  4. EJB组件必须打包成jar包。

  5. EJB太过笨重,且学习成本高。

正是因为EJB以上的问题,Spring于2003年应运而生,作为J2EE的补充,并且成功取代了其中的EJB,那Spring给我们带来了哪些好处?

  1. 非侵入式设计

  2. 方便解耦、简化开发

  3. 支持AOP

  4. 支持声明式事务

  5. 方便程序的测试

  6. 方便集成各种优秀的框架

  7. 降低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组件架构

image

核心

模块名称 主要功能
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的不同模块依赖版本不同问题。

各模块间的依赖关系

image

小结

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

学习资料

下面给出的是Spring官方的学习资料

Spring官方项目和教程

Spring官方归档文档

Spring源码

参考资料

Spring5系统架构全览

Spring的版本发展史

Spring历史版本变迁和如今的生态帝国

EJB的优势和使用场景

关于EJB、JavaEE和Spring的基础认知

J2EE是什么

EJB到底是什么,真的那么神秘吗

Spring和Spring框架组成

posted @ 2022-06-14 16:59  吃素的鸭  阅读(34)  评论(0)    收藏  举报