Spring 框架 是 Java 平台的 一个开源的 全栈(
Full-stack
)应用程序框架 和 控制反转容器实现,一般被直接称为Spring
。该框架的一些核心功能 理论上 可用于任何 Java 应用,但 Spring 还为基于 Java 企业版平台构建的 Web 应用 提供了大量的拓展支持。
Spring 没有直接实现任何的编程模型,但它已经在 Java 社区中广为流行,基本上完全代替了 企业级 JavaBeans(EJB
) 模型。Spring 框架 以 Apache License 2.0 开源许可协议的形式 发布,该框架 最初由 Rod Johnson 以及 Juergen Hoeller 等人 开发。
👆←🗎[1]
百科
版本历史
第一版由 Rod Johnson 开发,并在2002年10月发布在《Expert One-on-One J2EE Design and Development》一书中。2003年6月,Spring Framework 第一次发布在 Apache 2.0 许可证下。2004年3月,发布了里程碑的版本 1.0,2004年9月 以及 2005年3月,又发布了新的里程碑版本。2006年,Spring Framework 获得了 Jolt 生产力奖 和 JAX 创新奖。
2006年10月发布 Spring 2.0,2007年11月 Spring 2.5,2009年12月 Spring 3.0,2011年 Spring 3.1,2013年11月 Spring 3.2.5,2013年12月发布了4.0版本。值得注意的是,Spring 4.0 版本中 增加了对 Java SE 8、Groovy 2、Java EE 7 的一些方面 以及 WebSocket 的支持。
2017年9月 Spring Framework 正式发布了 5.0 版本,此版本引入了 Spring WebFlux,一个高性能、响应式、异步的 Web 框架。Spring 5.0 重点加强了 对 函数式编程、响应式程序设计(reactive programming
)的 支持能力,是一个非常大的进步。
核心功能模块
备注:维基百科上这一章节比较混乱,个人倾向于 参考 Wikipedia 对应条目的格式 来进行补充和修正。
强大的、基于 JavaBeans 的、采用控制反转(Inversion of Control,
IoC
)原则的 配置管理,使得应用程序的组建更加简易快捷。一个 可用于 Java EE 等运行环境的 核心 Bean工厂。
数据库事务的一般化抽象层,允许 声明式(
Declarative
)事务管理器,简化 事务的划分 使之与底层无关。内建的 针对 JTA 和 单个 JDBC 数据源的 一般化策略,使 Spring 的事务支持 不要求 Java EE 环境,这与一般的 JTA 或者 EJB CMT 相反。
JDBC
抽象层 提供了 有针对性的异常等级(不再从 SQL 异常中提取原始代码),简化了错误处理,大大减少了程序员的编码量。再次利用 JDBC 时,你无需再写出另一个 ‘终止’(
finally
)模块。⤷ 并且 面向 JDBC 的异常 与 Spring 通用数据访问对象(
Data Access Object
)异常 等级相一致。
以 [ 资源容器,DAO 实现 和 事务策略 ] 等形式 与 Hibernate,JDO 和 MyBatis、SQL Maps 集成。
⤷ 利用控制反转机制全面解决了许多典型的 Hibernate 集成问题。
⤷ 所有这些全部遵从 Spring 通用事务处理和通用数据访问对象异常等级规范。
灵活的 基于核心 Spring 功能的
MVC
网页应用程序框架。开发者 通过策略接口 将拥有对该框架的高度控制,因而该框架将适应于多种呈现(View)技术,例如 JSP、FreeMarker、Velocity、Thymeleaf 等。
值得注意的是,Spring 中间层可以轻易地结合于任何基于 MVC 框架的网页层,例如 Struts、WebWork 或 Tapestry。
提供 诸如事务管理等服务的
AOP
框架。
在设计应用程序
Model
时,MVC
模式(例如Struts
)通常难于给出一个简洁明了的框架结构。
Spring 却具有 能够让这部分工作变得简单的能力。程序开发员们 可以使用 Spring 的JDBC
抽象层 重新设计那些复杂的框架结构。
控制反转容器(依赖注入)
控制反转(IOC
,Inverse Of Control),即 把创建对象的权利 交给框架,也就是指 将对象的创建、对象的存储、对象的管理 交给了 Spring 容器。
Spring 容器 是 Spring 中的一个核心模块,用于管理对象,底层可以理解为 是一个 Map 集合。
面向切面编程
面向切面编程(Aspect-Oriented Programming,AOP
) 就是 将那些与业务无关,却 为业务模块所共同调用的 逻辑或责任 分开封装起来,便于减少 系统的重复代码,降低 模块间的耦合度,并有利于 未来的可操作性 和 可维护性。
数据访问(DAO层支持)
Spring Data 实现了 对数据访问接口的统一,支持多种 数据库访问框架 或 组件(如:JDBC、Hibernate、MyBatis(iBatis)) 作为最终数据访问的实现。
事务管理
Spring框架为事务管理提供了一致的抽象,具有以下优点:
跨不同事务 API(如:Java 事务、JDBC、Hibernate 和 Java Persistence API 事务(
JPA
))的一致编程模型。支持 声明式事务。
与 诸如 JTA 之类的复杂事务 API 相比,用于过程化事务管理的 API 更简单。
与 Spring 的数据访问抽象 出色地集成。
模型-视图-控制器(MVC)
Spring MVC 实现了 基于 MVC
设计方法的实现,结合 基于 Java 注解的配置,允许开发者开发出 低代码侵入的 Web 应用项目,并简便地实现大部分 Web 功能(包括 请求参数注入、文件上传控制 等)。
远程访问
“约定大于配置”的快速应用开发
Spring Boot
Spring Boot 是基于 Spring Framework 4.0 派生的,用于快速搭建 独立的 基于生产级别的 Spring 应用的框架,可以 以最小的依赖引入 来构建一个 Spring 应用。
并且它还具有以下特点:
拥有嵌入式的 Tomcat、Jetty、Undertow 或者 Reactor Netty(无需部署
war
文件)。尽可能地自动配置(
@AutoConfiguration
)Spring 和 第三方库。提供用于生产的功能,例如 指标、运行状态检查 和 外部化配置。
无需 麻烦而冗余的 XML 配置,一切都可以使用 Java 配置。
批处理
Spring Batch
集成框架
📖参看
- calc() - CSS(层叠样式表) | MDN
- fit-content() - CSS(层叠样式表) | MDN
- 【★】【GFM】GitHub Flavored Markdown Spec - github.github.com
- HTML Color Picker
- 「本站_标准颜色」 ⤵
- 『 红 』
#CC0000
- 『 粉 』
#FF6699
- 『 橙 』
#FCC000
- 『 绿 』
#6AA84F
- 『 蓝 』
#4343FF
- 『 紫 』
#9900FF
- 『 灰 』
#808080
- 『 红 』
- HTML中      等6种空白空格的区别_电脑小技巧_上网技巧_QQ地带
- Markdown 教程 | 菜鸟教程
- 👆 - 白色指向反手指数 表情符号: U+1F446 - Unicode 字符百科
- 📖 - 打开书 表情符号: U+1F4D6 - Unicode 字符百科
- 🔗 - 链接符号 表情符号: U+1F517 - Unicode 字符百科
- 🖇 - 链接回形针 表情符号: U+1F587 - Unicode 字符百科
- 🗎 - 文献: U+1F5CE - Unicode 字符百科
- ※ - 参考标志: U+203B - Unicode 字符百科
- ☌ - 关联: U+260C - Unicode 字符百科
- 🡅 - 向上重箭头: U+1F845 - Unicode 字符百科
- 🡆 - 向右重箭头: U+1F846 - Unicode 字符百科
- 🡇 - 向下重箭头: U+1F847 - Unicode 字符百科
- 🡄 - 向左重箭: U+1F844 - Unicode 字符百科
- ⤴ - 指向右侧然后向上弯曲的箭头 表情符号: U+2934 - Unicode 字符百科
- ⤵ - 指向右侧然后向下弯曲的箭头 表情符号: U+2935 cudarrr - Unicode 字符百科
- ⤶ - 指向下侧然后向左弯曲的箭头: U+2936 ldca - Unicode 字符百科
- ⤷ - 指向下侧然后向右弯曲的箭头: U+2937 rdca - Unicode 字符百科
- 🎵 - 快乐的音符 表情符号: U+1F3B5 - Unicode 字符百科
- ⇔ - 左右双箭头: U+21D4 hArr - Unicode 字符百科
- ⇒ - 向右双箭头: U+21D2 rArr - Unicode 字符百科
- — - Em 长划: U+2014 mdash - Unicode 字符百科
- 👍 - 竖起大拇指 表情符号: U+1F44D - Unicode 字符百科
- 标点符号 - 维基百科,自由的百科全书
- 连接号 - 维基百科,自由的百科全书