Java开发中,Spring框架已经成为了项目必备的框架了,那么我们就按照Spring中蕴含的设计思想,原则和模式来讲解

第一部分:讲解Spring框架中蕴含的经典设计模式和原则

第二部分:Spring中用于扩展的两种设计模式

第三部分:Spring框架中用到的其他十几种设计模式

在Spring的设计思想和模式中,包含 约定大于配置,低侵入松耦合,模块化轻量级

Spring框架,一般是指Spring Framework基础框架,其是Spring整个生态的基石,除了Spring Framework,Spring全家桶里面还有更多基于Spring Framework开发出来的,整合了更多功能Spring Boot,Spring Cloud

在Spring全家桶里面,Spring Framework作为基石,提供了最基础最核心的IOC和AOP功能,当然不仅仅如此,还有一些诸如事务管理Transactions,MVC框架等功能

图片

Spring MVC是出镜率极高的Web框架,提供了URL路由,Session管理,模块引擎等和Web开发相关的一系列功能

其次是Spring Boot基于Spring Framwork开发的,专注于微服务,之所以名字带个Boot,就是快速的开发启动一个项目,并进行相关的部署,Spring Boot支持的所有功能都是围绕的这个初衷设计的,比如,集成了很多第三方的开发包,简化了配置,集成了内置的WEB容器

然后就是基于微服务集群的Spring Cloud,Spring Cloud主要负责微服务集群的服务治理工作,包括了很多独立的功能组件,Spring Cloud Sleuth 调用链追踪,Spring Cloud Config配置中心

Spring生态的作用

利用Spring提供的框架,可以解耦业务和非业务代码的开发,更加聚焦于业务开发商,隐藏着复杂实现细节,降低开发难度,减少Bug,实现代码的复用,降低学习成本,简化开发

基本的CRUD业务代码的开发和通用的非业务代码的开发相比,非业务的通用代码更难以开发,使用框架,可以不必要开发通用代码,使用他人开发好的通用功能,代码的bug相比较来说,少一点,而且不同的项目使用相同的框架,对于研发人员,从一个项目切换到另一个项目的学习成本较低

接下来,就是常见的Web项目开发举例

对于Spring MVC的框架开发Web应用,我们只需要创建Controller,Service,Repository三层,然后在其中填写相对应的业务代码,告知框架三层的调用关系,剩下的就是非业务的功能,比如对象的创建,组装,管理,请求的解析

而且,内置了Tomcat,Netty等Web容器,在编写代码之后,可以一条命令就启动,部署

Spring框架蕴含的设计思想

Google Guava的源码讲解汇总,我们将讲到开发通用模块的普世的开发思想,产品意识,服务意识,代码质量意识,不要重复造轮子,我们再学习一些Spring源码价值所在

1.约定优于配置

在使用Spring开发的项目中,配置往往比较的复杂,繁琐,我们利用Spring MVC来开发Web项目,需要配置每个Controller类以及Controller类中的接口对应的URL

如何简化配置呢?Spring中先是基于了约定,后是基于了注解,这两种配置在Spring中都有用到,Spring在最小化配置的方面做得淋漓尽致

我们可以使用@RequestMapping注解,在Controller类或者接口上,写明对应的URL,使用@Transaction来表明支持事务罢了

之所以说基于约定呢,就是利用了默认的配置项进行配置,对于定制化的,才需要去设置

例如Spring JPA中,我们认为类名和表名相同,属性名和字段名相同,这样Order类,就对应的数据库的order表,只有偏离这个约定的时候,例如数据库中的表命名为order_info而非order,我们才需要显示的去配置类和表的映射关系 Order -> order_info表

约定优于配置,体现了二八法则,平时的项目开发中,80%的配置使用默认配置就可以了,只有20%配置才会显式的测试,所以,基于约定来配置,可以节省了大量编写配置的时间,省掉了很多脑子的体力劳动,提高了开发效率,除此外,基于相同的约定来开发,减少了学习和维护成本

2.低侵入,松耦合

框架的侵入性是衡量框架好坏的标准,低侵入是指,框架代码很少耦合在业务代码中,低侵入意味着,我们需要替换框架的时候,对原有的业务代码的改动很少,相反,如果高度侵入的,替换框架成本就很高的,几乎不可能,这也是老项目难以更新的原因

Spring提供的IOC容器,不需要Bean继承任何父类或者任何借口,就可以通过配置,进入Spring的管理中心,换一个容器,也只是重新配置一下,所有的Bean都不需要修改

除此外,AOP也体现了低侵入的特性,在项目汇总,对于非业务功能,比如请求日志,数据采点,安全校验,事务等等,没有必要做成侵入进行业务代码中,一旦侵入,修改的成本就会很高,基于AOP的开发模式,将非业务的代码放到切面汇总,修改成本很低了

3.模块化,轻量级

十几年前,EJB是Java企业级应用的主流开发框架,但是非常的臃肿,复杂,侵入性高,所以,为了替代笨重的EJB,有人开发了一套开源你的Interface 21框架,提供了基本的IOC功能,实际上,Interface21框架就是Spring框架的前身

现在即使Spring已经成为了庞大的生态,包含了五花八门的功能,但是并没有变成一个难以使用的庞大框架

而是良好的利用了Spring的模块化设计思路

图片

不同模块只负责相对独立的功能,模块化中,下层对上层,同层之间没有什么依赖和耦合,可以让使用者自由的引入部分的模块,而不会因为一个小的功能,被迫引入大量的依赖,所以可以认为是一个轻量级的开发框架

4.再封装,再抽象

Spring提供了对常见的中间件,系统类库,数据库访问的进一步抽象和封装,提供了更高层次的,更加统一的访问接口

利用,Spring提供了spring-data-reids的模块,对Redis Java开发类库,进行了进一步的封装,适配Spring的访问方式

比如,JdbcTemplate,就是对JDBC的进一步的封装和抽象,进一步的简化数据库的编程,同时还对JDBC的异常进行了进一步的封装,封装的数据库异常继承了DataAccessException,让其可以再开中不强制捕获,减少了不必要的异常捕获和处理,对不同的数据库的同种报错提供了统一的错误码,更加方便处理

本章重点:

借助Spring框架,我们了解了框架的作用,解耦了业务和非业务开发,聚焦在业务开发商,隐藏了复杂的实现细节,降低了学习难度,提高了复用性

我们说了Spring的一些设计思想,约定优于配置,低侵入,松耦合,模块化,再封装,再抽象的思想,更加通用,可以用到其他的框架开发中

课后思考

1.约定优于配置,其实这一点能延伸出很多的东西,约定可以理解为协议,可以说基于接口开发就是基于一种协议,也是遵循的约定优于配置.再者说,约定基于配置,可以延伸出模块化的思想,不改变的情况下,使用默认模块,并且支持模块的替换.是否可以说常见的MVC三层框架就是约定优于配置?

而我的举例,从网络传输协议说就是一种约定优于配置,从MAC层,IP层,TCP/UDP层,HTTP层,应用层,层层划分,交互双方按照相同协议读写,并且我们使用网络通信的时候,无须去手动配置底层的协议,而是有默认的底层协议去传输,让开发者聚焦于业务开发

发表评论

邮箱地址不会被公开。 必填项已用*标注