Spring Boot学习路线
Spring Boot 学习路线,本文计划根据作者近几年的工作、学习经验,来分析和制定一个学习使用 Spring Boot技术的步骤路线图。
SpringBoot是伴随着Spring4.0诞生的; SpringBoot的目标是简化Spring的开发过程、让开发者快速搭建框架和web容器。并为微服务提供更好的支持,提供服务监控能力。Spring为开发者带来了简单和能力:
Spring Boot使编码变简单
Spring Boot使配置变简单
Spring Boot使监控变简单
Spring Boot使部署变简单

一、准备工作
俗话说:“工欲善其事必先利其器”。特别是软件开发,这样一个重视工程实践的领域,一定要最先选择和熟悉一系列的开发环境工具。
首先推荐选用最新版本技术标准的开发工具,将如下的开发环境安装配置好。
开发环境:
(1)JDK 1.8
(2)Eclipse Oxygen EE版本 或者也可以使用 IntelliJ IDEA
(3)Tomcat 9(不需要,Spring Boot 中有内置的servlet容器)
安装配置好了,如上的开发工具后,可以在环境下,去新建普通的Java project、Dynamic web project,做一个“Hello World”式的入门程序,去验证环境可以正常使用。
然后,就可以进入到 Spring Boot 的技术学习了!
二、Spring Boot 知识入门
对计算机技术知识的学习和使用,我建议理论联系实践。在很多时候,我们接触到一个新的技术的时候,最开始,肯定是被这些技术涉及到的术语、词汇所困扰,不明白这些技术术语词汇的定义、概念、含义,没有这些做根基,就很难做到掌握和学习这个技术,并达到融汇贯通的程度。
所以,学习 Spring Boot ,首先就要从宏观的层面上,去了解这个技术它的背景知识、运用场景、发展渊源,演进历史,这一块,可以通过在网络上搜索到大量的知识介绍。
建议访问spring官网:https://spring.io/ 去获取最权威的介绍和定义。

我这里,强调一点:Spring Boot 运用“约定优于配置”的思想,对使用 Spring Boot创建的工程,提供约定、缺省、默认的配置,去简化传统手动、一步一步配置的开发方式;

三、Spring 技术基础知识
这一部分技术知识,已经是 Java EE开发必备的知识。包括IOC 和 AOP,重点要把IOC弄清楚,其次再说AOP。

1、Bean工厂
Spring中,存在一个 Bean工厂。我们把每一个java类当做是一个 bean(即豌豆),Spring就可以当做是一个factory(工厂),bean factory(豌豆工厂)的功能就是专门生产bean的。也就是说:Spring 可以去生产类的对象,也即 实例化类对象(new 类名();)。
2、IOC/DI 控制反转/依赖注入
从新建一个Dynamic Web project开始,在工程项目中,引入 最新版本的 Spring jar包,配置使用Spring,熟悉Spring框架在项目中,所起到的作用。重点学习了解IOC/DI,即“控制反转、依赖注入”
简单的说清楚,IOC产生的原因,及解决的问题。
在“三层结构”(表示层、业务逻辑层、数据访问层)架构开发中,层与层之间,类有调用依赖的关系
表示层——>业务逻辑层——>数据访问层,表示层类中,需要调用业务逻辑层类的方法;业务逻辑层类中,需要调用数据访问层类的方法。
以用户登录、注册、用户个人资料维护为例:设计3个类 UserController, UserService, UserDao ,分别对应“三层结构”的表示层、业务逻辑层、数据访问层。
那么,在项目实际开发代码中,存在:
表示层类 UserController 中,要引用 UserService:
public Class UserController {
UserService userService = new UserService();
……
}
业务逻辑层类 UserService 中,要引用 UserDao:
public Class UserService {
UserDao userDao = new UserDao();
……
}
我们会发现 类与类之间,有很紧密的依赖关系,即:在代码里,一个类中,引用了另外一个类,并 new 了一个对象。
这样,也就意味着有很强的耦合性。而这样,是不建议的。
因为软件设计中,很强调的是设计出来的软件需要具有很好的“特性:“高内聚、松耦合”。
为了解耦,降低这种很强的依赖性,Spring 框架中,设计出了 IOC。
代码中,不去 维护类与类之间的依赖性,也即: UserController 中不去new UserService()
而是去这样写:
public Class UserController {
//UserService userService = new UserService();
UserService userService;
……
}
那么 实例化UserService,即 new UserService();在哪里操作?
交给Spring 的bean工厂,去实例化。
如何去实例化类对象,有哪些需要约定,这就需要一个 xml配置文件去记录。后来,可以使用annotation(注解)的方式去配置属性。
spring配置文件:
<bean id="cat" class="test.spring.Cat" scope="prototype">
<property name="name" value="波斯猫"></property>
</bean>
3、AOP
面向切面编程,主要解决横切性的问题。
什么是横切性的问题?比如开发中,有很多的类、很多的方法,类与类之间存在调用的依赖的关系,我们称之为“从上而下”的线性调用。在这些代码中,经常需要在很多位置,添加“打印日志”的代码。而这些,“打印日志”的代码,基本都是一样的,和“从上而下”的线性调用,没有什么直接的业务逻辑关系。我们可以称之为:横切到这个“从上而下”的线性中。就像一个“十字”、“垂直”、“正交”这样。
除了“日志”属于横切性问题,“事务”也属于。
AOP就是为了解决这种横切性的问题,通过配置,不让这些相同的代码,充斥在项目代码的各处。而是通过,很少的配置,把这些相似的横切性代码,配置到它们应该出现的位置。
AOP也需要了解一些,专门的术语,我们这里只是简单的介绍一下,AOP需要说清楚,还要写专门的文章,去举例和描述。
四、Maven、Gradle
简单的说:Maven 和 Gradle 都是解决相同的问题,就是我们在创建Java相关的项目工程时,项目中经常需要使用各种 框架或类库的.jar 包。传统入门的方式,是去专门的官网,去下载好这些jar包,复制粘贴到项目中,然后“Add to buildpath”。这样会造成一些问题。
(1)一些框架的 jar包有很多个,在项目中使用时,它们jar包之间存在依赖关系;
(2)随着时间的迁移,同一个 .jar 包,会不断的推出新的版本,新旧版本间可能会有冲突问题。
(3)同一个项目,可能会使用好几个框架,这些框架中,都使用了一些相同的jar包,版本之间如何统一。
(4)同一台电脑中,创建多个工程,每个工程都使用了相同的框架,传统方式的结果就是,这些框架的jar包在电脑中,复制很多次。
……
Maven 和 Gradle 的出现就是,去维护和管理这些jar包。使得,只用去写一个配置文件,就可以自动的去使用这些jar包。
maven配置文件 pom.xml
<!-- spring begin -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
五、Spring Boot 的 Hello World程序
在Eclipse中,创建一个 使用 Spring Boot 技术的 Hello World程序。去初步的体验,和接触Spring Boot ,有个直观的感受和印象。有助于后面慢慢的去深入了解和学习掌握这个技术。

参考:
(1)目标:

(2)体系

六、Spring Boot 和 Spring、Spring Cloud 的 联系与区别

SpringBoot是基于Maven来管理Jar包的。首先我们需要在Idea中配置我们Maven的本地仓库位置
扫个红包吧!

Donate捐赠
如果我的文章帮助了你,可以赞赏我 1 元,让我继续写出更好的内容)

(微信) (支付宝)
微信/支付宝 扫一扫
Spring Boot学习路线的更多相关文章
- Spring Boot学习大全(入门)
Spring Boot学习(入门) 1.了解Spring boot Spring boot的官网(https://spring.io),我们需要的一些jar包,配置文件都可以在下载.添置书签后,我自己 ...
- Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客
==他的博客应该不错,没有细看 Spring Boot学习记录(二)--thymeleaf模板 - CSDN博客 http://blog.csdn.net/u012706811/article/det ...
- Spring boot学习1 构建微服务:Spring boot 入门篇
Spring boot学习1 构建微服务:Spring boot 入门篇 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- spring boot 学习资料
spring boot 学习资料: 学习资料 网址 Spring Boot Cookbook-极客学院 http://wiki.jikexueyuan.com/project/spring-boot- ...
- Spring Boot学习笔记2——基本使用之最佳实践[z]
前言 在上一篇文章Spring Boot 学习笔记1——初体验之3分钟启动你的Web应用已经对Spring Boot的基本体系与基本使用进行了学习,本文主要目的是更加进一步的来说明对于Spring B ...
- spring boot 学习(十四)SpringBoot+Redis+SpringSession缓存之实战
SpringBoot + Redis +SpringSession 缓存之实战 前言 前几天,从师兄那儿了解到EhCache是进程内的缓存框架,虽然它已经提供了集群环境下的缓存同步策略,这种同步仍然需 ...
- 转载:spring boot学习
Spring Boot学习 Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提 ...
- 我的Spring Boot学习记录(二):Tomcat Server以及Spring MVC的上下文问题
Spring Boot版本: 2.0.0.RELEASE 这里需要引入依赖 spring-boot-starter-web 这里有可能有个人的误解,请抱着怀疑态度看. 建议: 感觉自己也会被绕晕,所以 ...
- 15 个优秀开源的 Spring Boot 学习项目,一网打尽!
Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 <Spring Boot + Vue 全栈开发实战>迄今为止已经加印了 8 次,Spring Boot 的受 ...
随机推荐
- Loj 6433. 「PKUSC2018」最大前缀和 (状压dp)
题面 Loj 题解 感觉挺难的啊- 状压\(dp\) 首先,有一个性质 对于一个序列的最大前缀和\(\sum_{i=1}^{p} A[i]\) 显然对于每个\(\sum_{i=p+1}^{x}A[i] ...
- HDU 6301 (贪心+优先队列)
题目大意: 求一个长度为n的数列, 给出m个区间,这m个区间各自区间内的数不同 题解: 用优先队列来模拟过程 , 解题思路是想到了 , 可是不知道如何实现 , 果然还须继续努力呀 这道题思路是去掉重复 ...
- nginx(一)- 初识
前言 这里呢,开始我的nginx学习记录.关于nginx是什么?为什么?有什么好处?我就不说了,说的肯定没有网上其他人说的那么细.我在这里就记录我自己学习nginx的过程.只说怎么做,让我们快速用起来 ...
- PIE SDK主/次要分析
1.算法功能简介 主要分析功能是采用类似卷积滤波的方法将较大类别中的虚假像元归到该类中,首先定义一个变换核尺寸,然后用变换核中占主要地位(像元最多)类别数代替中心像元的类别数,次要分析相反,用变换核中 ...
- TeamCity 持续集成工具
https://www.jetbrains.com/teamcity/ null
- oracle 备份恢复篇(三)---rman spfile的丢失
一,环境准备 1, 拥有全备 数据 2, 查看spfile文件位置 SQL> SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER ...
- 再探canvas(小球实例)
之前学习过canvas的一些使用,也用过canvas绘制过时钟, 但是很久不用,有些遗忘了,这里做一个简单的回顾. 在web页面创建一个canvas画布非常简单,如下即可: <canvas id ...
- 重拾简单的linux指令之info 【转】
info命令 可以利用该命令获取帮助 1. 语法格式:info <command> 2. 语法简述: 类似于man命令的获取帮助信息,比较于man命令更容易读.是以网页的结构来显示内容.而 ...
- Ural 1260 Nudnik Photographer
Problem Description If two people were born one after another with one second difference and one of ...
- <div>里用display:block有用么?
对所有的块元素都没有意义,块元素的dispaly属性默认值为block,没必要再显式定义--除非你之前对块元素的display属性重新定义过. =========================== ...