【千锋教育java教程SpringBoot2全套,springboot快速入门到项目实战视频教程】
快速入门程序就是这样,可以发现springBoot程序开发比spring程序编写起来容易的多。
配置简洁,依赖关系简单,启动运行容易。
从以下几个方面研究:
这是应用的第一项配置,依赖的作用到底是什么?
项目中,pom.xml 中继承的坐标

点击去查看

可以看见它其实又继承了另一个坐标
这个坐标中定义了两组信息,第一组是各式各样的依赖版本号属性

第二组是各式各样的的依赖坐标信息,可以看出依赖坐标定义中没有具体的依赖版本号,而是引用了第一组信息中定义的依赖版本属性值

【注意】上面的依赖坐标定义是出现在<dependencyManagement>标签中的,其实是对引用坐标的依赖管理,并不是实际使用的坐标。
因此当你的项目中继承了这组parent信息后,在不使用对应坐标的情况下,前面的这组定义是不会具体导入某个依赖的
因为在maven中继承机会只有一次,上述继承的格式还可以切换成导入的形式进行,并且在阿里云的starter创建工程时就使用了此种形式

SpringBoot做了无数个技术版本搭配的列表,这个技术搭配列表的名字叫做parent。
parent自身具有很多个版本,每个parent版本中包含有几百个其他技术的版本号,不同的parent间使用的各种技术的版本号有可能会发生变化。
当开发者使用某些技术时,直接使用SpringBoot提供的parent就行了,由parent帮助开发者统一的进行各种技术的版本管理
现在这一切工作都可以交给parent来做了。开发者无需关注这些技术间的版本冲突问题,只需要关注用什么技术就行了,冲突问题由parent负责处理。
【总结】
SpringBoot官方给出了好多个starter的定义,方便开发者使用,而且名称都是如下格式:
命名规则:spring-boot-starter-技术名称
starter定义了使用某种技术时对于依赖的固定搭配格式,也是―种最佳解决方案,使用starter可以帮助开发者减少依赖配置
项目中的pom.xml定义了使用SpringMVC技术,但是并没有写SpringMVC的坐标,而是添加了一个名字中包含starter的依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>

在spring-boot-starter-web中又定义了若干个具体依赖的坐标

以前学习的开发SpringMVC程序需要导入spring-webmvc的坐标和spring整合web开发的坐标,就是上面这组坐标中的最后两个。
我们发现除了这两个还有其他的,比如第二个,叫做spring-boot-starter-json。看名称就知道,这个是与json有关的坐标了,但是看名字发现和最后两个又不太一样,它的名字中也有starter,打开看看里面有什么?

可以发现,这个starter中又包含了若干个坐标,其实就是使用SpringMVC开发通常都会使用到Json,使用json又离不开这里面定义的这些坐标,看来还真是方便,SpringBoot把我们开发中使用的东西能用到的都给提前做好了。
你仔细看完会发现,里面有一些你没用过的。的确会出现这种过量导入的可能性,沿关系可以通过maven中的排除依赖剔除掉一部分。不过你不管它也没事,大不了就是过量导入。
【总结】
使用starter可以帮开发者快速配置依赖关系。
以前写依赖3个坐标的,现在写导入一个就搞定了,加速依赖配置。
目前程序运行的入口就是SpringBoot工程创建时自带的那个类了,带有main方法的那个类,运行这个类就可以启动SpringBoot工程的运行

SpringBoot本身是为了加速Spring程序的开发的,而Spring程序运行的基础是需要创建自己的Spring容器对象(loC容器)并将所有的对象交给Spring的容器管理,也就是一个一个的Bean。
那用了SpringBoot 来加速开发spring程序,这个容器还在吗?
→ 这个疑问不用说,一定在。
当前这个类运行后就会产生一个spring容器对象,并且可以将这个对象保存起来,通过容器对象直接操作Bean。
看一下
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext ctx = SpringApplication.run(HelloWorldMainApplication.class,args);
HelloController bean = ctx.getBean(HelloController.class);
System.out.println(bean);
}
}

可以看到,SpringBoot 程序启动还是创建了一个Spring 容器对象。
这个类在SpringBoot 程序中是所有功能的入口,我们称这个类 为 引导类。
作为一个引导类最典型的特征就是当前类上方声明了一个注解 @SpringBootApplication
【总结】
当前我们做的SpringBoot入门案例勾选了Spirng-web的功能,并且导入了对应的starter。

SpringBoot发现,既然开发者要做web程序,肯定离不开使用web服务器,这样吧,帮人帮到底,送佛送到西。它帮我们搞一个web服务器,你要愿意用,直接使用就好了,干脆我再多给你几种选择,你随便切换。万一你不想用我给你提供的,也行,你可以自己搞。
由于这个功能不属于程序的主体功能,可用可不用,于是乎SpringBoot将其定位成辅助功能
别小看这么一个辅助功能,它帮开发者又减少了好多的设置性工作。
【内嵌Tomcat 定义位置】
打开查看web的starter导入了哪些东西

就是第三个了,可以看到它也是一个starter,再次进入

圈出来的是个核心坐标,tomcat-embed-core ,称之为Tomcat 内嵌核心。
就是这个坐标将Tomcat 的功能引入到了我们的程序中。
【内嵌Tomcat 运行原理】
Tomcat服务器是一款软件,而且是一款使用java语言开发的软件,tomcat安装目录中保存有jar,好多个jar。

tomcat服务器运行其实是以对象的形式在Spring容器中运行的,这就是就算我们没有安装tomcat,但是还能使用的原因。
Tomcat 以一个对象的形式存在,保存在Spring容器中悄悄运行。
具体运行的是什么呢?其实就是上前面提到的那个tomcat内嵌核心

如果我们把这个对象从Spring 容器去掉,
通过排除依赖实现

刷一下,再次启动试试

这次直接就停掉了。
【更换内嵌Tomcat】
SpringBoot 提供了3款 内置的服务器。
想用哪个,加个坐标就OK。前提是把tomcat排除掉,因为tomcat是默认加载的。
org.springframework.boot
spring-boot-starter-jetty

就是这样。现在就已经成功替换了web服务器,核心思想就是用什么加入对应坐标就可以了。如果有starter,优先使用starter。