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

简介

是什么让java世界变得更好,程序员变得更友爱,秃头率变得不是那么的高,让程序员没必要再天天996,有时间找个女友?前端

是Spring。java

是什么让企业级java应用变得简单易懂,下降了java程序员的进入门槛,致使了如今遍地都是java程序员的窘境?react

是Spring。git

是什么从无冕之王变成了事实上的企业标准,让规则制定者也要颤抖几分?程序员

是Spring。github

简单的说,Spring知足了大家对于java程序的全部想象。是个java程序员都会投入Spring的怀抱。web

今天这篇文件就是对Spring基础的总结。文末附有小彩蛋,欢迎你们向后拉!算法

Spring基础

Spring是在2003年,做为对以前的复杂的J2EE规范而产生的。有些人认为Spring和J2EE是竞争关系,实际上他们是互补的。spring

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中文文档阅读连接

本文做者:flydean程序那些事

本文连接:www.flydean.com/spring5/

本文来源:flydean的博客

欢迎关注个人公众号:程序那些事,更多精彩等着您!

相关文章
相关标签/搜索