Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
文章目录
- 简介
- Spring基础
- Core核心技术
- Testing测试
- Data Access
- Web Servlet
- Web Reactive
- 总结
简介
是什么让java世界变得更好,程序员变得更友爱,秃头率变得不是那么的高,让程序员不必再每天996,有时间找个女朋友?
是Spring。
是什么让企业级java应用变得简单易懂,降低了java程序员的进入门槛,导致了现在遍地都是java程序员的窘境?
是Spring。
是什么从无冕之王变成了事实上的企业标准,让规则制定者也要颤抖几分?
是Spring。
简单的说,Spring满足了你们对于java程序的所有想象。是个java程序员都会投入Spring的怀抱。
今天这篇文件就是对Spring基础的总结。文末附有小彩蛋,欢迎大家向后拉!
Spring基础
Spring是在2003年,作为对之前的复杂的J2EE规范而产生的。有些人认为Spring和J2EE是竞争关系,实际上他们是互补的。
Spring最新版本是5.3.0, 通过使用Spring,我们可以很方便的创建企业级应用程序。同时Spring还提供了对groovy和Kotlin的支持。在Spring5.1之后,需要JDK8以上才能正确运行。
更多内容请访问www.flydean.com
狭义的Spring指的是Spring基础,如下图所示的Spring Framework Runntime:
广义的Spring是指整个Spring家族,包括Spring Boot,Spring Cloud等等项目。
这里我们探讨的是狭义上的Spring Framework。它可以分为下面几个模块:
- Core - Core是Spring得以运行的核心,主要包括IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP等内容。
- Testing - 测试是Spring中非常重要的一个模块,主要包括Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient等内容。
- Data Access - 这一部分是对数据库的访问相关,包括Transactions, DAO Support, JDBC, O/R Mapping, XML Marshalling等内容。
- Web Servlet - 传统的对Web Servlet的支持,包括Spring MVC, WebSocket, SockJS, STOMP Messaging等内容。
- Web Reactive - 这是Spring5新增的对于响应式系统的支持,包括Spring WebFlux, WebClient, WebSocket等。
- Integration - 是对第三方系统的支持,包括Remoting, JMS, JCA, JMX, Email, Tasks, Scheduling, Caching等常用的第三方系统。
- Languages - 最后是对其他JVM语言的支持,包括Kotlin, Groovy等动态语言。
Spring Framework被分成了很多个模块,我们在构建应用程序的时候可以自由选择使用哪个模块。最核心的模块是核心容器:包括配置模块和依赖注入机制。除此之外,Spring Framework提供了对不同应用架构的基础支持,包括消息,交易数据,存储和网站。他还包括了Servlet-based Spring MVC web framework和最新的响应式Spring WebFlux reactive web framework。
Core核心技术
Spring的核心技术是Spring中最为重要的内容,而Core中最最中的就是Spring框架的反转控制(IOC)容器。
通过在Spring中使用面向方面编程(AOP)技术,IOC在Spring中得到了全面的应用。并且Spring搭建了自己的AOP框架,同时Spring还提供了对第三方AOP框架AspectJ的集成,从而满足不同需求的用户的使用。
IOC也称为依赖注入(DI)。它是指对象仅通过构造函数参数、工厂方法的参数或从工厂方法构造或返回对象实例后,通过在其上设置的属性来定义其依赖项(即与之一起工作的其他对象)的过程。当容器在创建bean时将会注入这些依赖项。
这个过程跟bean自己控制实例化,或者通过直接构造类或服务定位器模式来定位其依赖项的方式相反(因此称为控制反转)。
- Spring5参考指南:IOC容器
- Spring5参考指南:依赖注入
Bean在Spring中就是一个业务组件,我们通过创建各种Bean来完成最终的业务逻辑功能。
在容器内部,每个bean的定义可以被表示为BeanDefinition,通过BeanDefinition可以获得bean的很多信息包括:包名,bean的作用域,生命周期,bean的引用和依赖等。
- Spring5参考指南:Bean的创建
- Spring5参考指南:Bean作用域
- Spring5参考指南:Bean的生命周期管理
- Spring5参考指南:容器扩展
- Spring5参考指南:基于注解的容器配置
- Spring5参考指南:组件扫描
- Spring5参考指南:JSR 330标准注解
从最开始的面向过程编程,到后面的面向对象编程,程序的编写方式发生了重大的变化,面向对象编程将业务逻辑封装成一个一个的对象,所有的操作都转换为对对象的操作。
面向对象编程现在使用的非常普遍,一般来说只要是高级语言都支持,但是它也有缺点,比如如果我们想做一些横跨对象的操作(如统计各个对象里面某个方法的执行时间),这时候面向对象可以能力有不逮。我们可能需要在每个对象里面都添加一些统计时间的代码,那么有没有更好的方法来处理这个问题呢?
面向方面编程(AOP)通过提供对程序结构的另一种思考方式来补充面向对象编程(OOP)。OOP中模块化的关键单元是类,而AOP中模块化的单元是方面。方面支持跨多个类型和对象的关注点(如事务管理)的模块化。(在AOP文献中,这种关注通常被称为“横切”关注。)
- Spring5参考指南:SpringAOP简介
- Spring5参考指南:AspectJ注解
- Spring5参考指南:基于Schema的AOP
- Spring5参考指南:AOP代理
- Spring5参考指南:AspectJ高级编程之Configurable
通常来说一个Bean包含一个默认的无参构造函数,和属性的get,set方法。
org.springframework.beans 包里面有个很重要的类叫做BeanWrapper接口和他的实现BeanWrapperImpl,BeanWrapper提供了设置和获取属性值(单个或批量)、获取属性描述符和查询属性的功能,以确定它们是可读的还是可写的。
此外,BeanWrapper还支持嵌套属性,允许将子属性的属性设置为无限深度。BeanWrapper还支持添加标准JavaBeans属性PropertyChangeListeners和VetoableChangeListeners,而不需要在目标类中支持代码。最后,BeanWrapper提供了对设置索引属性的支持。BeanWrapper通常不直接由应用程序代码使用,而是由DataBinder和BeanFactory使用。
- Spring5参考指南: BeanWrapper和PropertyEditor
Spring提供了很方便的事件的处理机制,包括事件类ApplicationEvent和事件监听类ApplicationListener。 他实现的是设计者模式,如果实现了ApplicationListener接口的bean部署到Spring容器中,则每次ApplicationEvent发布到ApplicationContext时,都会通知该bean。
- Spring5参考指南:事件Event
SpEL的全称叫做Spring Expression Language。通常是为了在XML或者注解里面方便求值用的,通过编写#{ }这样的格式,即可使用。
Spring5参考指南: SpEL
Spring5参考指南:Environment
Spring定义了Resource接口用来对资源的访问,一般来说资源有两种形式,一种是URL的形式从外部链接加载,一种是File的形式从系统本身查找。
- Spring5参考指南: Resources
Testing测试
Spring团队提倡测试驱动开发(TDD)。 Spring团队发现正确使用控制反转(IoC)肯定会使单元测试和集成测试更容易(因为类的setter方法和适当的构造函数的存在使得它们更容易在测试中连接在一起而不必设置服务定位器注册表和类似结构)。
例子待续…
Data Access
通过Spring可以方便的进行事物管理,并且为各种数据访问技术(例如JDBC,Hibernate或JPA)提供了一致性的DAO接口,从而可以轻松地在上述持久性技术之间进行切换,不需要考虑对各种数据访问技术的适配问题。
例子待续…
Web Servlet
Spring提供了Spring MVC框架来实现对web的支持,与其他许多Web框架一样,Spring MVC围绕前端控制器模式进行设计,在该模式下,中央Servlet DispatcherServlet提供了用于请求处理的共享算法,而实际工作是由可配置的委托组件执行的。 该模型非常灵活,并支持多种工作流程。
与任何Servlet一样,都需要根据Servlet规范使用Java配置或在web.xml中声明和映射DispatcherServlet。 反过来,DispatcherServlet使用Spring配置发现请求映射,视图解析,异常处理等所需的委托组件。
- Spring MVC 中的http Caching
- @SessionAttributes 和 @SessionAttribute的区别
Web Reactive
除了对于传统的Web Servlet的支持以外,Spring还引入了WebFlux框架和响应式WebClient,实现了对reactive系统的支持。
WebFlux框架是非阻塞的,需要在并在Netty,Undertow和Servlet 3.1+容器等服务器上运行。
例子待续…
总结
曾经的我很幼稚的花了几个月的时间,一句话一句话的来翻译官方的Spring 5.x文档,现在这里奉献给大家,欢迎大家下载,可以的话大家关注我一下,给我点个赞,谢谢了:
Spring Framework 5.x中文指南
不想下载的朋友可以通过这个链接直接阅读 Spring-Framework-Documentation中文文档阅读链接
本文链接:http://www.flydean.com/spring5/
最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!
欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!
Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新相关推荐
- spring5高级编程_Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
简介 是什么让java世界变得更好,程序员变得更友爱,秃头率变得不是那么的高,让程序员不必再每天996,有时间找个女朋友? 是Spring. 是什么让企业级java应用变得简单易懂,降低了java程序 ...
- 【spring authorization server系列教程】(一)入门系列,spring authorization server简介。快速构建一个授权服务器(基于最新版本0.3.0)
系列文章目录 [spring authorization server系列教程](一)入门系列,快速构建一个授权服务器 文章目录 系列文章目录 前言 一.目前已实现的功能 二.入门,一步一步快速开始构 ...
- DL:关于深度学习常用数据集中训练好的权重文件(Deeplab v3、MobileNet、InceptionV3、VGG系列、ResNet、Mask R-CNN )下载地址集合(持续更新)
DL:关于深度学习常用数据集中训练好的权重文件(Deeplab v3.MobileNet.InceptionV3.VGG系列.ResNet.Mask R-CNN )下载地址集合(持续更新) 目录 基于 ...
- 明翰英语教学系列之雅思阅读篇V0.9(持续更新)
文章目录 传送门 6. 阅读 READING 6.1 阅读评分标准 6.2 阅读题型 `6.2.1 阅读填空题` `摘要填空题(Summary)` `无选项摘要填空` 1. 找定位词 2. 确定答案词 ...
- Spring技术栈系列教程-- SpringMVC 、SpringBoot 、SpringCloud
转载来源:https://mp.weixin.qq.com/s/N507Cfb_mbkGvHtg_FIaVg Spring Boot 系列 什么是 Spring Boot? 告诉你,Spring Bo ...
- 微信小程序联盟:官方文档+精品教程+demo集合(未完待续,持续更新中……)
1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...
- 明翰经验系列之人生经验与经典文案篇(持续更新)V1.1
文章目录 传送门 前言 佳句赏析 人生哲理与经验 某人的生活经验 上进心 `亲情` 爱情 友情 职场 健康 互联网&手机 看人 生活 穿着 购物 买房 综合 买车 综合 二手车 经典台词与文案 ...
- wish圈:wish商户平台高清视频教程全套下载【共67集】+持续更新
自从wish圈发布原创wish视频教程以来,wish圈的<wish商户平台高清视频教程>收到各个wish卖家的高度热爱.由于之前一直未能提供<wish商户平台高清视频教程>下载 ...
- java项目遇到的问题_java系列:项目中遇到的一些问题(持续更新中)
JSONArray去重的问题 JSONArray array = ["2","0","0","0","0&qu ...
最新文章
- jQuery使用经验建议
- 为什么不建议在代码中使用 User 这个单词?
- Linux Shell学习(3)
- isAlive()方法的作用
- SqlServer跨域查询
- UI素材模板|网站后台管理的表单可临摹优秀模板
- 命令父窗口变颜色_【编程】第五期:Python Tkinter图形化教程03布局之父窗口、pack和LabelFrame...
- git2.29.2..2安装_Centos6.5+jumpserver组件安装(2)
- 2021年高考成绩查询贵州一本线,2021年贵州高考一本分数线预测,今年贵州一本分数线预估多少分...
- Android 原生开发、H5、React-Native Flutter 使用利弊和场景技术分享
- 小学生计算机基础知识课件,计算机基础知识课件(图表部份).ppt
- [数据挖掘案例]逻辑回归LR模型实现电商商品个性化推荐
- 使用金蝶云星空(以前叫:金蝶K3 CLOUD)后,感觉像踩进了一个坑
- crm系统是什么很棒ec实力_哪个CRM系统好
- 《专业创新实践Ⅱ》大作业 LeNet在眼疾识别数据集iChallenge-PM上的应用
- 基于rfid的毕业设计题目50例
- 路由器 RIP-2 配置
- 回归评价指标(MSE、RMSE、MAE、R-Squared、拟合优度)
- Phalanx HDU 【2859】
- Python爬虫之Scrapy框架系列(18)——深入剖析中间件及实战使用
热门文章
- 7怎么把中文改为英文_windows10系统英文版本,如何更改为中文版本
- 引用wx.getclipboarddata中的内容_教材、图书在引用时要注意哪些方面
- Unhandled promise rejection Error: errCode: -501007 invalid parameters | errMsg: Invalid Key Name: _
- windows 2008 域 删除不活动计算机账号,如何删除域内非活动计算机账号?
- POJ2594(二分匹配+Floyd求传递闭包)
- OD的 CC断点,内存访问断点,硬件断点 解析
- 标准STUN判断NAT类型的过程及改进
- MySQL 备份与主从复制
- linux 下 MySQL卸载和安装
- 蓝绿发布、滚动发布、灰度发布,有什么区别?