Spring 的狭义与广义

简介:

Java 开发者对于 Spring 应该不会陌生。Spring 可以说是 Java EE 开发事实上的标准。无论是 Web 开发,还是分布式应用,Spring 都致力于简化开发者创建应用的复杂性。本文讨论 Spring 在狭义上以及广义上,所承载的不同的概念。

Spring 有广义与狭义之说。

狭义上的 Spring——Spring Framework

狭义上的 Spring, 是特指 Spring 框架(Spring Framework)。Spring 框架是为了解决企业应用开发的复杂性而创建的。Spring 框架的主要优势之一就是其分层架构。分层架构允许使用者选择使用哪一个组件,同时为 Java EE 应用程序开发提供集成的框架。Spring 框架使用基本的 POJO 来完成以前只可能由 EJB 完成的事情。然而,Spring 框架的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 框架中受益。Spring 框架的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring 框架是一个分层的面向与 Java 应用的一站式轻量级开源框架。

Spring 框架前身,是 Rod Johnson 发表在 Expert One-on-One J2EE Design and Development 一书中所包含的3万行代码的附件。在书中,他展示了如何在不使用 EJB 的情况下构建高质量、可扩展的在线座位预留应用程序。为了构建该应用程序,他写了超过万行的基础结构代码。这些代码包含了许多可重用的 Java 接口和类,如 ApplicationContext 和 BeanFactory 等。由于 Java 接口是依赖注入的基本构件,因此他将类的根包命名为com.interface21,意思是这是一个提供给21世纪的参考!根据书中描述,这些代码已经在一些真实的金融系统中使用。

由于该书影响甚广,当时有几个开发人员 Juergen Hoeller 以及 Yann Caroff 联系上了 Rod Johnson,希望将com.interface21代码开源。Yann Caroff 将这个新框架并命名为了“Spring”,意思是就像一缕春风扫平传统 J2EE 的恶冬。所以说,Rod Johnson、Juergen Hoeller 以及 Yann Caroff 是 Spring 框架的共同创立者。

2003年2月,Spring 0.9 发布,采用了 Apache 2.0 开源协议。2004年4月,Spring 1.0 发布。到如今,Spring 框架已经是第5个主要版本了。

广义上的 Spring——Spring 技术栈

广义上的 Spring 是指以 Spring 框架为核心的 Spring 技术栈。这些技术栈涵盖了从企业级应用到云计算等各个方面的内容。包括:

  • Spring Data:Spring 框架中的数据访问模块对 JDBC 及 ORM 提供了很好的支持。随着 NoSQL 和大数据的兴起,出现了越来越多的新技术,比如非关系型数据库、MapReduce 框架。Spring Data 正是为了让 Spring 开发者能更方便地使用这些新技术而诞生的“大”项目——它由一系列小的项目组成——分别为不同的技术提供支持,例如 Spring Data JPA、Sprng Data Hadoop、Spring Data MongoDB、Spring Data Redis 等等。通过 Spring Data,开发者可以用 Spring 提供的相对一致的方式来访问位于不同类型的数据存储中的数据。
  • Spring Batch:一款专门针对企业级系统中的日常批处理任务的轻量级框架,能够帮助开发者方便地开发出强壮、高效的批处理应用程序。通过 Spring Batch 可以轻松构建出轻量级的、健壮的并⾏处理应用,并支持事务、并发、流程、监控、纵向和横向扩展,提供统⼀的接口管理和任务管理。Spring Batch 对批处理任务进行了一定的抽象,它的架构可以大致分为三层,自上而下分别是业务逻辑层、批处理执行环境层和基础设施层。Spring Batch 可以很好地利用 Spring 框架所带来的各种便利,同时也为开发者提供了相对熟悉的开发体验。
  • Spring Integration:在企业软件开发过程中,经常会遇到需要与外部系统集成的情况,这时可能会使用 EJB、RMI、JMS 等各种技术,也许你会引入ESB。如果你在开发时用了 Spring 框架,那么不妨考虑下 Spring Integration——它为 Spring 编程模型提供了一个支持企业集成模式的扩展,在应用程序中提供轻量级的消息机制,可以通过声明式的适配器与外部系统进行集成。Spring Integraton 中有几个基本的概念:Message(带有元数据的Java对象)、Channel(传递消息的管道)和Message Endpoint(消息的处理端)。在处理端可以对消息进行转换、路由、过滤、拆分、聚合等操作;更重要的是可以使用 Channel Adapter,这是应用程序与外界交互的地方,输入是 Inbound、输出则是 Outbound,可选的连接类型有很多,比如 AMQP、JDBC、Web Services、FTP、JMS、XMPP、多种 NoSQL 数据库等。只需通过简单的配置文件就能将所有这些东西串联在一起,实现复杂的集成工作。
  • Spring Security:前身是 Acegi,是较为成熟的子项目之一,是一款可定制化的身份验证和访问控制框架。读者朋友如果对该技术有兴趣,可以参阅笔者所著的开源书《Spring Security 教程》(https://github.com/waylau/spring-security-tutorial)以了解更多 Spring Security 方面的内容。
  • Spring Mobile:对 Spring MVC 的扩展,旨在简化移动 Web 应用的开发。
  • Spring for Android:用于简化 Android 原生应用程序开发的 Spring 扩展。
  • Spring Boot:是 Spring 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Spring Boot 为 Spring 平台及第三方库提供开箱即用的设置,这样你就可以有条不紊地来进行应用的开发。多数 Spring Boot 应用只需要很少的 Spring 配置。通过这种方式,Spring Boot 致力于在蓬勃发展的快速应用开发领域成为领导者。读者朋友如果对该技术有兴趣,可以参阅笔者所著的开源书《Spring Boot 教程》(https://github.com/waylau/spring-boot-tutorial)是了解更多 Spring Boot 方面的内容。本书的“第25章 Spring Boot”也会对 Spring Boot 做深入的探讨。
  • Spring Cloud:使用 Spring Cloud,开发人员可以开箱即用的实现分布式系统中常用的服务。这些服务可以任何环境下运行,包括分布式环境,也包括开发人员自己的笔记本电脑、裸机数据中心,以及 Cloud Foundry 等托管平台。Spring Cloud 基于 Spring Boot 来进行构建服务,并可以轻松地集成第三方类库,来增强应用程序的行为。读者如果对该技术有兴趣,可以参阅笔者所著的开源书《Spring Cloud 教程》(https://github.com/waylau/spring-cloud-tutorial)是了解更多 Spring Cloud 方面的内容。本书的“第26章 Spring Cloud”也会对 Spring Cloud 做深入的探讨。
  • ......

Spring 的技术栈还有很多,读者朋友有兴趣的话,可以访问笔者所著的“Spring 5案例大全”项目(<https://github.com/waylau/spring-5-book)了解更多信息。

约定

由于 Spring 是早期 Spring 框架的总称,所以,有时候这个“Spring”这个命名会给读者产生困扰。一般地,我们约定“Spring 框架”特指是狭义上的 Spring,即 Spring Framework;而“Spring”特指是广义上的 Spring,泛指 Spring 技术栈。

参考引用

目录
相关文章
|
3月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
197 2
|
4月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
18天前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
37 1
SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
40 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
13天前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
31 5
|
18天前
|
Java 容器
springboot自动配置原理
启动类@SpringbootApplication注解下,有三个关键注解 (1)@springbootConfiguration:表示启动类是一个自动配置类 (2)@CompontScan:扫描启动类所在包外的组件到容器中 (3)@EnableConfigutarion:最关键的一个注解,他拥有两个子注解,其中@AutoConfigurationpackageu会将启动类所在包下的所有组件到容器中,@Import会导入一个自动配置文件选择器,他会去加载META_INF目录下的spring.factories文件,这个文件中存放很大自动配置类的全类名,这些类会根据元注解的装配条件生效,生效
|
17天前
|
安全 Java 测试技术
如何在 Spring Boot 中禁用 Actuator 端点安全?
如何在 Spring Boot 中禁用 Actuator 端点安全?
50 1
|
26天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
39 2
|
2月前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
66 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块