Spring全家桶还是傻傻分不清楚?(Ⅰ)

很多萌新在学习Java的初期经常会被什么Spring、SpringFramework、SpringBoot、SpringMVC、SpringCloud...搞得焦头烂额,对这些名词傻傻分不清楚,当然也包括博主本人,那我们今天就一起来看看他们究竟是何方神圣!本来想一篇博客把这些都讲清楚,但是发现每一个都可以细致讲解很多东西,所以就拆分成了几篇文章(Paul:我真是苦啊!)

Spring/SpringFramework

Spring 和 Spring Framework 实际上是指同一个开源 Java 框架,通常简称为 Spring。

百度百科中关于Spring的起源介绍如下:

Spring的历史

要谈Spring的历史,就要先谈J2EE。J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层概念的标准化,但是在实践中并没有获得绝对的成功,因为开发效率,开发难度和实际的性能都令人失望。

Spring的一个最大的目的就是使Java企业级应用开发更加容易。Spring致力于提供一个以统一的、高效的方式构造整个应用,并且可以将单层框架以最佳的组合揉和在一起建立一个连贯的体系。可以说Spring是一个提供了更完善开发环境的一个框架,可以为POJO(Plain Old Java Object)对象提供企业级的服务。POJO即简单普通的java对象,一般用在数据层映射到数据库表的类,类的属性与表字段一一对应。

Spring 最核心的思想就是不重新造轮子,开箱即用,提高开发效率。

Spring 翻译过来就是春天的意思,它的出现给 Java 程序员带来了春天啊!Amazing!

Java能有今天这种辉煌的市场占比,Spring功不可没,可封内阁首辅大臣!

Spring的特性和优势

Spring Framework有哪些特性,用了这个框架对开发而言有什么好处呢?

从Spring 框架的特性来看:

  • 非侵入式:基于Spring开发的应用中的对象可以不依赖于Spring的API

  • 控制反转:IOC——Inversion of Control,指的是将对象的创建权交给 Spring 去创建。使用 Spring 之前,对象的创建都是由我们自己在代码中new创建。而使用 Spring 之后。对象的创建都是给了 Spring 框架。

  • 依赖注入:DI——Dependency Injection,是指依赖的对象不需要手动调用 setXX 方法去设置,而是通过配置赋值。

  • 面向切面编程:Aspect Oriented Programming——AOP

  • 容器:Spring 是一个容器,因为它包含并且管理应用对象的生命周期

  • 组件化:Spring 实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用XML和Java注解组合这些对象。

  • 一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库(实际上 Spring 自身也提供了表现层的 SpringMVC 和持久层的 Spring JDBC)

从使用Spring 框架的好处看:

  • Spring 可以使开发人员使用 POJOs 开发企业级的应用程序。只使用 POJOs 的好处是你不需要一个 EJB 容器产品,比如一个应用程序服务器,但是你可以选择使用一个健壮的 servlet 容器,比如 Tomcat 或者一些商业产品。

  • Spring 在一个单元模式中是有组织的。即使包和类的数量非常大,你只要担心你需要的,而其它的就可以忽略了。

  • Spring 不会让你白费力气做重复工作,它真正的利用了一些现有的技术,像 ORM 框架、日志框架、JEE、Quartz 和 JDK 计时器,其他视图技术。

  • 测试一个用 Spring 编写的应用程序很容易,因为环境相关的代码被移动到这个框架中。此外,通过使用 JavaBean-style POJOs,它在使用依赖注入注入测试数据时变得更容易。

  • Spring 的 web 框架是一个设计良好的 web MVC 框架,它为比如 Structs 或者其他工程上的或者不怎么受欢迎的 web 框架提供了一个很好的供替代的选择。MVC 模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素之间的松散耦合。模型(Model)封装了应用程序数据,通常它们将由 POJO 类组成。视图(View)负责渲染模型数据,一般来说它生成客户端浏览器可以解释 HTML 输出。控制器(Controller)负责处理用户请求并构建适当的模型,并将其传递给视图进行渲染。

  • Spring 对 JavaEE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

  • 轻量级的 IOC 容器往往是轻量级的,例如,特别是当与 EJB 容器相比的时候。这有利于在内存和 CPU 资源有限的计算机上开发和部署应用程序。

  • Spring 提供了一致的事务管理接口,可向下扩展到(使用一个单一的数据库,例如)本地事务并扩展到全局事务(例如,使用 JTA)

Spring有哪些模块/组件?

可以分成下面这七大模块👇

  • 数据模块(Data Access / Integration

  • Web模块

  • 切面模块(Aop,Aspects,Instrumentation,Messaging

  • 工具模块(Instrumentation)

  • 消息模块

  • 核心模块

  • 测试模块

1.Data Access/Integration(数据访问/集成)

数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 5个模块,具体介绍如下。

  • 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 事务模块:支持编程和声明式事务管理。

2.Web模块

Spring 的 Web 层包括 Web、Servlet、WebSocket 和 Webflux 4个组件,具体介绍如下。

  • Web 模块:提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IOC 容器初始化以及 Web 应用上下文。

  • Servlet 模块/WebMVC:提供了一个 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 模块的功能。

3.切面模块

在 Core Container 之上是 AOP、Aspects 等模块,具体介绍如下:

Aop : Aspect Oriented Programming , 面向切面编程 ,是对 OOP 的补充

Aspects : 切面

Spring AOP是一个基于代理的 Aop 框架 ,日常使用比较多的

  • AOP 模块:提供了面向切面编程实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中,这样各司其职,降低业务逻辑和通用功能的耦合。

  • Aspects 模块:提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。

  • Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。

  • messaging 模块:Spring 4.0 以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。

  • jcl 模块: Spring 5.x中新增了日志框架集成的模块。

4.工具模块

Instrumentation , 这个是 Java 的一个接口,可以用来做

  • 监控代理

  • 事件日志记录

  • 代码覆盖率

Examples of such benign tools include monitoring agents, profilers, coverage analyzers, and event loggers.

—— 来自该接口的注释

AspectJLTW(load-time-weaver) 就是通过该方式来进行切面织入

5.消息模块

Spring-messaging 模块提供了一种基于 WebSocketSTOMP 协议实现

STOMP (Simple Text Oriented Messaging Protocol) 是一种流文本定向消息协议,也是一种为MOM(Message Oriented Middleware,面向消息的中间件)设计的简单文本协议

常见的这几个MQ都支持该协议,比如 RocketMQRabbitMQActiveMQ

简单版:启用简单内置消息代理时使用的组件

进阶版:对接外部 MQ 来实现这个广播,订阅

6 Core Container(Spring的核心容器)

Spring 的核心容器是其他模块建立的基础,也是Spring 最核心的部分,这里有我们熟悉的 控制反转 (Inversion of Control, IOC )和依赖注入( Dependency Injection, DI),由 Beans 模块、Core 核心模块、Context 上下文模块和 SpEL 表达式语言模块组成,没有这些核心容器,也不可能有 AOP、Web 等上层的功能。具体介绍如下:

  • Beans 模块:提供了框架的基础部分,包括控制反转和依赖注入。

    控制反转: Inversion Of Control,简称IOC。对象的创建控制权由程序自身转移到外部

    (容器),这种思想称为控制反转。

    对象的创建权由程序员主动创建转移到容器(由容器创建、管理对象)。这个容器称为:IOC容器或Spring容器

    依赖注入: Dependency Injection,简称DI。容器为应用程序提供运行时,所依赖的资源,

    称之为依赖注入。

    程序运行时需要某个资源,此时容器就为其提供这个资源。

    例:EmpController程序运行时需要EmpService对象,Spring容器就为其提供并注入EmpService对象

    IOC容器中创建、管理的对象,称之为:bean对象

  • Core 核心模块:封装了 Spring 框架的底层部分,包括资源访问、类型转换及一些常用工具类。

  • Context 上下文模块:建立在 Core 和 Beans 模块的基础之上,集成 Beans 模块功能并添加资源绑定、数据验证、国际化、Java EE 支持、容器生命周期、事件传播等。ApplicationContext 接口是上下文模块的焦点。

  • spring-expression:提供对表达式语言(Spring Expression Language) SpEL 的支持,只依赖于 core 模块,不依赖于其他模块,可以单独使用。

7.Test模块

Test 模块:Spring 支持 JUnit(单元测试框架)、TestNG(类似 JUnit)、Mockito(主要用来 Mock 对象)、PowerMock(解决 Mockito 的问题比如无法模拟 final, static, private 方法)等等常用的测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。

包含Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值