作者 | 梁唐
大家好,我是梁唐。
又到了周日我们每周一次的送书环节,之前几周送了很多算法相关的书籍。其实关注的小伙伴当中也有不少是从事开发工作的,所以今天给从事开发以及想要从事开发的小伙伴选了这一本《Spring boot实战》。
说到互联网公司的技术,一定离不开前后端,而说到后端呢,又离不开Java。而说到Java,则又离不开Spring。所以可想而知,Spring家族对于开发工程师来说有多么重要。
估计很多还在上学的小伙伴可能是第一次听说Spring这个词,会觉得很奇怪,Java我知道,但Spring这个东西究竟是干嘛的,真的有这么重要吗?
这里呢,我们来做一个简单的科普,让大家感受一下。
我们用Java写一个几千行代码不使用任何框架的简单项目非常方便,毕竟用到的类和接口就那么些,背都背得下来。但是当这个项目一旦庞大,大到数万行代码甚至是数十万行代码之后,就会有很多问题产生。
其中最大的问题是系统的耦合,举个最简单的例子。比如说某天你和另外一个同事接到一个需求,你们要一起开发一个功能。这个功能比较复杂,你们商量了一下决定把这个功能拆成两个部分,他做前面数据准备的部分,你做后续数据处理加工的部分。
由于你们是共同开发的,你需要依赖他的接口,所以为了方便,你决定写一个Mock的接口,返回一些人造的假数据,等他开发完了之后再替换。
public class SampleController {
private FunctionService service = new MockService();
@RequestMapping("/function")
public String welcome() {
return service.getResult();
}
}
当你开发测试完成之后,你同事也完成了他的部分。那么你剩下要做的就是要把代码当中用到的所有MockService
替换成正式的Service。你看了一眼,一共写了好几千行代码,好几十处地方需要修改。要只是改名字还好办,如果初始化的逻辑也不同的话,就会非常麻烦。
这里面最大的问题就是如果使用传统的new的方式创建实例,会导致实例的使用方也需要关心实例的创建过程。问题是在公司里尤其是大公司里,服务的开发和使用方往往不是一拨人。这种耦合很多时候会带来问题和麻烦。
正确的做法是什么呢?正确的做法是使用方不关心实例的创建过程,直接把现成的实例拿来用就行。至于这个实例是怎么来的,当中又经历了什么,使用方统统不用理会。
这种思想叫做控制翻转,也就是说不再由使用方来控制实例的生成。Spring框架的主要功能就是这个,Spring框架会创建一个容器,也就是保存实例的地方。所有注册了Spring的服务,它们的实例都会交给Spring管理。开发者在使用容器中的实例的时候,只需要通过配置就可以从Spring容器中获得已经初始化好的实例,也就解除了其中的耦合。
当我们需要修改使用的实例的时候,如果使用new的方式,我们需要把每一处地方都人工修改过来。而通过Spring框架,我们只需要修改配置即可。
比如刚才的代码,如果使用Spring框架写出来会是这个样子。
public class SampleController {
@Autowired
private FunctionService service;
@RequestMapping("/function")
public String welcome() {
return service.getResult();
}
}
我们可以注意到FuncService
这个类我们并没有给它new一个实例,而只是加上了一个@Autowired
的注解。这个注解就表明了这个类会通过Spring容器获取实例,我们在代码当中只需要直接使用即可。
在后端当中系统的耦合非常非常见,也正因此Spring框架诞生之后大行其道,再加上它本身拓展性很强,使得它在众多领域有了应用,比如Web领域的Spring MVC以及对hibernate和ibatis的集成等等。但应用多了之后,也导致了一些问题,比如配置文件过多过于复杂。正因此Spring社区对庞大的Spring家族进行了简化,推出了Spring Boot。
Spring Boot它其实是一个基于Spring的快速开发整合包,当中整合了Spring MVC、Spring Security等多种功能,但门槛要低得多。也正因此,它成了当今主流的后端框架之一。
但像是Spring Boot这样的框架,它的学习和入门往往是一个问题,毕竟很多概念和思路偏理论,并且往往需要大规模项目的场景,并不是我们看一段代码或者是描述就可以领会得到的,一定要结合项目才能有深入的理解。这也是正是我选了这本书的原因,这本书当中有大量实践性的项目,我们可以动过亲身实践获得更加深刻的体验。
本书的章节按照“基础实践、源码分析、项目开发”三个步骤展开,知识结构合理。
首先,从Spring Boot技术栈简介和基础环境搭建讲起,有多个章节涉及Spring Boot技术栈的相关知识。
其次,将理论结合源码讲解,由Spring Boot的基础使用讲到Spring Boot的源码解读,包括Spring Boot整合Thymeleaf制作页面、Spring Boot整合MyBatis操作数据库、Spring Boot启动流程的源码分析、Spring Boot自动配置流程讲解等。
最后,讲解商城项目的开发实战,主要包括商城后台管理系统的开发和商城端的功能开发。在实践过程中将对项目功能进行拆分,使用Spring Boot分别实现各个独立的功能点,比如图片上传功能、分页功能、登录功能、验证码功能等,并整合多个独立的基础功能到一个完整的功能模块中,最终完成各个功能模块的功能和交互,开发出一个完整的商城系统。
一个可以实操练手的完整项目,再配备上详细的技术讲解手册,是提高开发人员技术水平最高效的方式。