简介

是什么让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自己控制实例化,或者通过直接构造类或服务定位器模式来定位其依赖项的方式相反(因此称为控制反转)。

Bean在Spring中就是一个业务组件,我们通过创建各种Bean来完成最终的业务逻辑功能。

在容器内部,每个bean的定义可以被表示为BeanDefinition,通过BeanDefinition可以获得bean的很多信息包括:包名,bean的作用域,生命周期,bean的引用和依赖等。

从最开始的面向过程编程,到后面的面向对象编程,程序的编写方式发生了重大的变化,面向对象编程将业务逻辑封装成一个一个的对象,所有的操作都转换为对对象的操作。

面向对象编程现在使用的非常普遍,一般来说只要是高级语言都支持,但是它也有缺点,比如如果我们想做一些横跨对象的操作(如统计各个对象里面某个方法的执行时间),这时候面向对象可以能力有不逮。我们可能需要在每个对象里面都添加一些统计时间的代码,那么有没有更好的方法来处理这个问题呢?

面向方面编程(AOP)通过提供对程序结构的另一种思考方式来补充面向对象编程(OOP)。OOP中模块化的关键单元是类,而AOP中模块化的单元是方面。方面支持跨多个类型和对象的关注点(如事务管理)的模块化。(在AOP文献中,这种关注通常被称为“横切”关注。)

通常来说一个Bean包含一个默认的无参构造函数,和属性的get,set方法。

org.springframework.beans 包里面有个很重要的类叫做BeanWrapper接口和他的实现BeanWrapperImpl,BeanWrapper提供了设置和获取属性值(单个或批量)、获取属性描述符和查询属性的功能,以确定它们是可读的还是可写的。

此外,BeanWrapper还支持嵌套属性,允许将子属性的属性设置为无限深度。BeanWrapper还支持添加标准JavaBeans属性PropertyChangeListeners和VetoableChangeListeners,而不需要在目标类中支持代码。最后,BeanWrapper提供了对设置索引属性的支持。BeanWrapper通常不直接由应用程序代码使用,而是由DataBinder和BeanFactory使用。

Spring提供了很方便的事件的处理机制,包括事件类ApplicationEvent和事件监听类ApplicationListener。 他实现的是设计者模式,如果实现了ApplicationListener接口的bean部署到Spring容器中,则每次ApplicationEvent发布到ApplicationContext时,都会通知该bean。

SpEL的全称叫做Spring Expression Language。通常是为了在XML或者注解里面方便求值用的,通过编写#{ }这样的格式,即可使用。

Spring定义了Resource接口用来对资源的访问,一般来说资源有两种形式,一种是URL的形式从外部链接加载,一种是File的形式从系统本身查找。

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配置发现请求映射,视图解析,异常处理等所需的委托组件。

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的一切想象-持续更新的更多相关文章

  1. 系列文章:老项目的#iPhone6与iPhone6Plus适配#(持续更新中,更新日期2014年10月12日 星期日 )

    本文永久地址为http://www.cnblogs.com/ChenYilong/p/4020399.html ,转载请注明出处. ********************************** ...

  2. Spring mvc 4系列教程(三)—— Spring4.X的新特性

    1.Spring4.0的新特性 从2004年Spring的1.0发布后,后面又发布了很多重要的版本:Spring2.0提供了XML命令空间和AspectJ的支持:Spring2.5提出了注解驱动(an ...

  3. Spring mvc 4系列教程(二)——依赖管理(Dependency Management)和命名规范(Naming Conventions)

    依赖管理(Dependency Management)和命名规范(Naming Conventions) 依赖管理和依赖注入(dependency injection)是有区别的.为了将Spring的 ...

  4. Spring mvc 4系列教程(一)

    一.Spring框架概览 Spring框架是一种轻量级.一站式解决企业级应用的解决方案.不仅如此,Spring的模块化的特点,可以使你只引用所需要的部分,而无需引用全部.你可以使用控制反转容器(IoC ...

  5. Spring Data Jpa系列教程--------实体解析和关联关系

    Spring Data Jpa是基于HIbernate开发的,所以建立实体建的实体和映射关系需要好好好的去了解一下,本文有以下内容,实体管理器介绍,实体与数据库表的映射介绍,关联关系(一对多,多对多) ...

  6. spring源码系列(一):使用Gradle构建spring5源码的一些坑和步骤

    源代码github:  https://github.com/spring-projects/spring-framework.git 一 修改项目配置文件中gradle版本和地址 替换成本地安装的版 ...

  7. WebApi学习总结系列第三篇(Http)此篇持续更新...

    越了解Http对WebApi开发就越有帮助,因为WebApi就是建立在Http基础之上的. 一.Http: 通过 <ASP.NET Web API 2 框架揭秘>一书中 了解到 什么叫We ...

  8. springboot系列教程导学篇

    spring boot2.0系列教程学习之导学篇 springboot 2.0深度学习系列教程. Spring Boot 虽然凯哥从2015年年初开始就接触了spring boot.但是在之后的公司中 ...

  9. Spring-Cloud-Alibaba系列教程(一)Nacos初识

    前言 在2020年即将开启SpringCloudAlibaba的专题,希望2020年共同学习进步. 学习资料 文档 Naco文档 程序猿DD Spring Cloud Aliabab专题 专题博客 视 ...

  10. Linux Shell系列教程

    学习Linux Shell知识,就来Linux大学网(Linuxdaxue.com)! 本系列适合Linux初学者,属于Linux入门级教程,主要介绍了Shell的分类.语法格式以及脚本的使用和编写格 ...

随机推荐

  1. 3dMax建模笔记(一):介绍3dMax和创建第一个模型Hello world

    前言   三维模型,虽然淘宝上一抓一大把,但是三维开发人员最好还是具备一定基础的建模能力.本文用hello world模型描述基本的3dMax建模流程.   3dMax   3D Studio Max ...

  2. 机器学习策略篇:详解单一数字评估指标(Single number evaluation metric)

    单一数字评估指标 无论是调整超参数,或者是尝试不同的学习算法,或者在搭建机器学习系统时尝试不同手段,会发现,如果有一个单实数评估指标,进展会快得多,它可以快速告诉,新尝试的手段比之前的手段好还是差.所 ...

  3. java图书管理系统界面版本+mysql数据库

    描述: java+mysql数据库实现的图书管理系统,实现了图书添加,图书删除,图书修改,图书查看,图书列表查看等,用户增加,用户删除.用户修改,用户查看等 功能: 图书管理功能:图书添加,图书删除, ...

  4. 解决xshell连不上ubuntu虚拟机

    分析 原因:虚拟机未安装ssh服务(Xshell远程连接需通过ssh协议) 解决方法 ubuntu安装ssh服务器 sudo apt-get install openssh-server 后续有问题可 ...

  5. Centos8上安装Redis5.X

    一.下载Redis 下载地址:wget http://download.redis.io/releases/redis-5.0.7.tar.gz 解压:tar -xzvf redis-5.0.7.ta ...

  6. redis-cluster 性能调优

    关闭RDB防止fork进程的内存溢出问题 save "" appendonly=yes 防止某个节点挂掉,整个cluster挂掉的问题 cluster-require-full-c ...

  7. 【Azure 云服务】Azure Cloud Service如何来设置固定IP地址(ReservedIP)

    问题描述 在云中环境,部署的应用到云服务(Cloud Service)都是动态的IP地址,所以在添加DNS记录的时候,都是使用CNAME,但如果需要在DNS中添加A记录,则需要一个固定IP. 解决方案 ...

  8. 【Azure 应用服务】App Service与Application Gateway组合使用时发生的域名跳转问题如何解决呢?

    问题描述 为App Service配置了应用服务网关(Application Gateway),并且为Application Gateway配置了自定义域名,通过浏览器访问时,出现域名跳转问题,由自定 ...

  9. Nginx-web系列

    nginx 系列 目录 nginx 系列 一 简述 1.1 为什么要使用? 1.2 主要用于哪里? 二. Nginx 搭建环境 2.1 版本选择 2.2 环境准备 2.2 yum 直装 2.3 ngi ...

  10. 痞子衡嵌入式:使用恩智浦GUI Guider快速创建全新LCD屏示例工程的步骤

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是使用恩智浦GUI Guider快速创建全新LCD屏示例工程的步骤. 在痞子衡旧文 <在i.MXRT1170上快速点亮一款全新LCD ...