简介

是什么让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。它可以分为下面几个模块:

  1. Core - Core是Spring得以运行的核心,主要包括IoC Container, Events, Resources, i18n, Validation, Data Binding, Type Conversion, SpEL, AOP等内容。
  2. Testing - 测试是Spring中非常重要的一个模块,主要包括Mock Objects, TestContext Framework, Spring MVC Test, WebTestClient等内容。
  3. Data Access - 这一部分是对数据库的访问相关,包括Transactions, DAO Support, JDBC, O/R Mapping, XML Marshalling等内容。
  4. Web Servlet - 传统的对Web Servlet的支持,包括Spring MVC, WebSocket, SockJS, STOMP Messaging等内容。
  5. Web Reactive - 这是Spring5新增的对于响应式系统的支持,包括Spring WebFlux, WebClient, WebSocket等。
  6. Integration - 是对第三方系统的支持,包括Remoting, JMS, JCA, JMX, Email, Tasks, Scheduling, Caching等常用的第三方系统。
  7. 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中文文档阅读链接

本文作者:flydean程序那些事
本文链接:http://www.flydean.com/spring5/
本文来源:flydean的博客
欢迎关注我的公众号:程序那些事,更多精彩等着您!

spring5高级编程_Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新相关推荐

  1. DL:关于深度学习常用数据集中训练好的权重文件(Deeplab v3、MobileNet、InceptionV3、VGG系列、ResNet、Mask R-CNN )下载地址集合(持续更新)

    DL:关于深度学习常用数据集中训练好的权重文件(Deeplab v3.MobileNet.InceptionV3.VGG系列.ResNet.Mask R-CNN )下载地址集合(持续更新) 目录 基于 ...

  2. 西门子标准报文1常用_基于Snap7使用C#编程访问西门子PLC系列教程(2)-S7协议

    本文是Snap7软件包系列教程的第2篇,我们来介绍下S7协议,包括如下几个主题: 1.S7协议简介 2.S7协议命令简介 3.S7协议通信的角色与模式 1.S7协议简介 S7协议是西门子S7系列PLC ...

  3. 西门子smartclient怎么用_基于Snap7使用C#编程访问西门子PLC系列教程(3)-Snap7Client(建立连接)...

    本文是Snap7软件包系列教程的第3篇. 在上一篇文章中,我们介绍了S7通信协议中有三种角色:客户端/服务器/伙伴:有两种通信模式:客户端/服务器(Client/Server)模式和伙伴/伙伴(Par ...

  4. 明翰英语教学系列之雅思阅读篇V0.9(持续更新)

    文章目录 传送门 6. 阅读 READING 6.1 阅读评分标准 6.2 阅读题型 `6.2.1 阅读填空题` `摘要填空题(Summary)` `无选项摘要填空` 1. 找定位词 2. 确定答案词 ...

  5. Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新

    文章目录 简介 Spring基础 Core核心技术 Testing测试 Data Access Web Servlet Web Reactive 总结 简介 是什么让java世界变得更好,程序员变得更 ...

  6. spring5高级编程_我也来推荐一波你看了以后大呼过瘾的编程书

    今天在网站上看到有一个问答特别火,那就是有哪些有哪些你看了以后大呼过瘾的编程书? 看到好多人的问答都被推荐的几百.我今天也来回答一下这个问题. 先给大家分享一下怎样学习任何一种编程语言,然后再给大家推 ...

  7. spring5高级编程_有哪些你看了以后大呼过瘾的编程书?

    今天在网站上看到有一个问答特别火,那就是有哪些有哪些你看了以后大呼过瘾的编程书? 看到好多人的问答都被推荐的几百.我今天也来回答一下这个问题. 先给大家分享一下怎样学习任何一种编程语言,然后再给大家推 ...

  8. java spring 面向切面编程_Spring Boot实战系列(3)AOP面向切面编程

    AOP是一种与语言无关的程序思想.编程范式.项目业务逻辑中,将通用的模块以水平切割的方式进行分离统一处理,常用于日志.权限控制.异常处理等业务中. 快速导航 编程范式主要以下几大类 AOP(Aspec ...

  9. microbit c语言编程软件,Micro:bit系列教程25:自定义Micro:bit软件包

    cpp代码:/** * 使用此文件来定义自定义函数和图形块. * 想了解更详细的信息,请前往 https://makecode.microbit.org/blocks/custom */ /** * ...

最新文章

  1. MySQL5.6.16二进制源码安装详解及一键安装实现
  2. java help
  3. Gradle's dependency cache may be corrupt解决方法
  4. ASP.NET编程技巧
  5. 20155230 2016-2017-2 《Java程序设计》第十周学习总结
  6. lambda表达式优化反射_反射选择器表达式
  7. 不要被约束的意思_不要再奢望你会变得自律了丨“他律”比“自律”更重要
  8. Dubbo-Admin 正式支持 3.0 服务治理
  9. python opencv 摄像头_python+opencv实现摄像头调用的方法
  10. 【BZOJ】【2768】【JLOI2010】冠军调查
  11. c语言课程主要目的和内容,C语言程序设计课程教学大纲
  12. Python语言实现用于动物分类的产生式系统
  13. Origin绘图时出现Speed Mode is on水印解决方式
  14. 单调、加班、血汗工厂,被夸大的富士康背后真相到底是什么?
  15. js监听浏览器关闭事件(区分刷新和关闭,兼容IE9,10,11,Edge,Chrome和Firefox)
  16. Mysql学习代码笔记
  17. R与结构方程模型(2):潜变量
  18. 【手写】一些情景题 记录
  19. sql语句查询下级下下级
  20. SAP ERP SD模块中维护销售人员

热门文章

  1. 什么是CDN ,CDN的作用
  2. SFTPUtils工具类及使用
  3. 面试题:Fibonacci数列
  4. MessageBox 弹框
  5. 论文: YOLO9000-Better,Faster,Stronger
  6. servlet中中文正常显示,mysql数据库手动插入中文正常显示,servlet向mysql中插入中文显示乱码...
  7. 生成n个从1到M(n = M)之间的不重复的随机数问题(洗扑克牌算法)
  8. TW实习日记:第16天
  9. ICC Scenario Definition
  10. python cookbook 笔记三