概述
1)What is Spring?
- 应用框架,一个大体的web程序包含的Dao、Service、Impl和显示页面等相关组件
- 编程和配置的模版,能够包含了各种数据库连接等常用功能,使得我们不需要经常去接触底层的重复性代码
- 底层支持,如对于不同的数据库Mysql、Oracle等Spring内部有相关的配置能够支持忽视这部分差异,无差别地对数据库进行操作
缺点:
- 臃肿
- 复杂的setup步骤
- 复杂的配置
- 复杂的build和deploy步骤
2)What is Spring Boot?
Spring Boot是一个中间件,套接在Spring之上,充当起简化配置和COC的作用。
用Spring Boot前
| App |
| Tomcat |
| Spring |
| OS |
用Spring Boot后
| App |
| Spring |
| OS |
可以看到,连Tomcat的配置都简化了(被放在了一个jar文件中),专心写程序,其他的配置都只需要交给Spring Boot按照默认规格执行即可。
IoC的概念
首先,要明白IoC是为了低耦合。因为往往对象的Hard Coding会使得不同的类之间存在紧耦合,不便于拓展。如下图所示:

1)为什么?
我们不希望实现代码之间的紧耦合(如Computer类中存在IntelCPU类对象这种硬编码),于是我们希望能够通过“注入”的方式,创建Computer的过程中能够自动地在Computer类中创建一个IntelCPU类的实现(而非硬编码实现)。
2)怎么做?
这种自动的“依赖注入”过程,即IoC(Invert of Control)或者DI(Dependency Inverse),需要通过依赖注入容器(Dependency Inverse Container)来实现。在我们这个情况,用的就是Spring Container。
在Spring中,我们通过XML文件配置这种依赖(谁是谁的“配件”啊,我生成的时候你也给我生成一个呀),因为我们可以在将来更改XML的配置从而改变依赖关系,因此不是一种紧耦合。
我个人愿意把这种松耦的编程风格叫做“面向XML编程”。
3)和Spring Boot的关系
因为依赖注入的时候,我们总要花时间去关心XML的配置。而Spring Boot的作用就是让配置变得更简单的,所以它简化了我们配置XML的步骤。
具体实现就是通过加上注解,标识好哪些是等待装配的组件,让系统自动去装配。如下图:

简化过后的电脑Computer中,需要一个CPU组件。于是在CPU成员头上加@Autowired注解,让Spring Boot自己去找相应的Component自动装配。对于等待被安装的类,用@Component表明它是一个充当组件的类。
此外,松耦合能够实现局部的测试(即测试时排除某个Component的代码,以便排查错误)。只有松耦合才能够创建Mock Object,能够在测试代码的时候不影响数据库中的数据。
总的来说,松耦合能够帮助我们(1)更好地测试 (2)更好地维护、拓展代码
使用
1)有STS(Springboot Tool Suite)就直接用STS,基本上就是多了一个“New Spring Starter Project...”的Eclipse
2)要么就到官网(https://start.spring.io/)初始化把对应的Spring Boot Starter的zip文件下载下来,然后当作Project打开。
教程:我强推嘟嘟