详细SpringBoot教程之入门(二)
写在前面鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的博文初步都定下来包括SpringBoot介绍、入门、配置、日志相关、web开发、数据访问、结合docker、缓存、消息队列、检索、任务安全、分布式等等一系列的博文,工作量很大,是个漫长的过程,每一步我.
写在前面
鉴于有人留言说想要学习SpringBoot相关的知识,我这里打算写一个SpringBoot系列的相关博文,目标呢是想让看了这一系列博文的同学呢,能够对SpringBoot略窥门径,这一系列的博文初步都定下来包括SpringBoot介绍、入门、配置、日志相关、web开发、数据访问、结合docker、缓存、消息队列、检索、任务安全、分布式等等一系列的博文,工作量很大,是个漫长的过程,每一步我都尽量详细,配上截图说明,也希望对看的同学真的有用。
单纯就是想分享技术博文,还想说一句就是,如果觉得有用,请点个关注、给个赞吧,也算对我来说是个宽慰,毕竟也得掉不少头发,嘿嘿嘿
系列文章传送条
详细SpringBoot教程之入门(一)
详细SpringBoot教程之入门(二)
详细SpringBoot教程之配置文件(一)
详细SpringBoot教程之配置文件(二)
详细SpringBoot教程之日志框架
详细SpringBoot教程之Web开发(一)
详细SpringBoot教程之Web开发(二)
详细SpringBoot教程之Web开发(三)
详细SpringBoot教程之数据访问
详细SpringBoot教程之启动配置原理
详细SpringBoot教程之缓存开发
项目打包
接上一篇的博文,我们创建了一个简单的SpringBoot应用,并运行而且进行了打包,体验了SpringBoot的“甜头”,那么这里作为开始呢,我想先说说上一篇结尾的打包。
可能在上一篇学习完打包的同学会有一个疑问,我最开始Tomcat啥的都没有依赖引入,并且打包之后,没有对jar包所在环境进行任何的调整和配置,我为什么执行jar包依旧能毫无报错的执行呢?
其实这个问题很简单,我们试想一下,应用程序的运行不可能平白无故,在没有任何依赖支持的情况下运行,既然如此,那么一定是我们运行的jar包就已经具备了一切运行所需要的配置依赖,没错,这就是答案。那么我们怎么去看,不急,这里我就告诉你窥探jar包的秘密。首先我们可以使用压缩工具打开我们放在桌面的jar包,如下图
我们会看到这三个目录,我们进入第一个目录BOOT-INF中,我们会发现有两个目录,classes这里放的是我们写的代码编译之后的class,而libs里面就是我们秘密的真谛,libs里面放的都是我们项目的依赖,到最底下发现了没有,没错,就是Tomcat依赖包。
SpringBoot项目在创建的时候,就帮我们引入了Tomcat的依赖包,所以我们才能启动运行程序,如下图,后面我们说到,我们最开始在pom中引入的几个依赖在SpringBoot有特定的名称,叫做starters,我们引入的是web应用的starter,所以会自带帮我们引入我们web开发所需要的相关的基本配置依赖。
pom.xml
现在我们来看看项目中引人注目的pom.xml文件,我们看看里面的内容。我们会发现项目里有父项目,点进父项目,如下(只能截取一部分,你可以自行在Idea中打开)
其实仔细一点的人就会发现,我们以前使用Maven创建SpringMVC之类的项目的时候,我们在导入依赖需要引入版本version,像下面这样
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.12.Final</version>
</dependency>
可是在我们的SpringBoot的pom.xml中,我们不需要引入相关依赖,这是因为有上面提到的parent,parent中有所有SpringBoot的依赖,这样,以后我们导入依赖默认是不需要写版本的,如果不在dependencles里面的管理依赖,自然需要我们写版本。
启动器starter
上一篇博文里说了,我们只需要导入spring-boot-starter-web依赖,SpringBoot就会自动帮我们导入web开发所需要的基本依赖包,包括Tomcat相关的依赖包,而spring-boot-starter-web就是属于我们所说的SpringBoot启动器,像这样的启动器有很多,我们可以去官方文档中看传送条
如图,点击右边的pom,就会进去该启动器所包含的相关依赖。
像spring-boot-starter-web这样的启动器正式一点,叫做springboot场景启动器,也就是帮我们导入相关开发场景下(比如spring-boot-starter-web就是web场景下的相关依赖)正常运行所需要的依赖。我们可以在导入不同的场景依赖,比如web开发导入spring-boot-starter-web,数据库jpa访问导入spring-boot-starter-data-jpa,想使用高级消息队列导入spring-boot-starter-amqp等等。
Springboot将所有的功能场景都抽取出来,做成一个个starter(启动器),只要在项目里面引入这些starter相关场景的所有依赖导入进来,要用什么功能,就倒入什么场景启动器,是不是很方便。
主程序类(主入口类)
我们现在来分析一下主程序类中的相关基本注解。
@SpringBootApplication
@SpringBootApplication是Springboot应用标注在某个类上,用来说明这个类是Springboot的入口类,springboot就应该运行在这个类的main方法来启动Springboot应用,我们按住Ctrl键点进去,我们主要看里面的注解
@SpringBootApplication
在@SpringBootApplication中,一个比较关键的注解就是@SpringBootApplication,@SpringBootConfiguration是Springboot的配置类,标注在某个类上表示,这个类是一个Springboot的配置,同样按住Ctrl键点进去,我们我们会看到@SpringBootConfiguration中有一个@Configuration,这个注解就是标注各种配置类,配置文件的,如果我们对AOP有一定理解的话,其实就知道配置类也是容器中的一个组件,所以在@Configuration中,我们是通过@Component进行标注的。
@EnableAutoConfiguration
回到@SpringBootApplication中,我会可以看到另一个配置类注解@EnableAutoConfiguration,这个注解是标注着开启自动配置功能,这样才使得我们不需要像以前在Spring项目中那样,配置繁琐的东西,而是Springboot会帮我们自动配置,@EnableAutoConfiguration告诉SoringBoot开启自动配置功能,这样启动配置才能生效,这个注解里面的东西,我们要好好讲一下,因为这样我们就会知道,SpringBoot是怎么帮我们自动加载相关依赖,并放置在哪里的,内容如下。
@AutoConfigurationPackage自动配置包,Spring的底层注解@import,给容器导入一个组件,导入的组件由AutoConfigurationPackage.Registrar.class进行注册,其实AutoConfigurationPackage就是将主配置类(@SpringBootApplication标注的类)的所在包及下面所有的子包里面所有的组件扫描到Spring容器,如果你以前写过SpringMVC项目之类的会,就会知道,我们在写一些Controller或者Service的时候,我们需要在配置文件中,配置bean扫描controller的包名,而我们在SpringBoot就不需要了
AutoConfigurationImportSelector
在@AutoConfigurationPackage下面,我们会发现我们通过import导入了一个类,我们进入到这个类中,然后在下图位置debug一下这个类,如下图
就会发现,其实AutoConfigurationImportSelector就是给容器中导入非常多的自动配置类,也就是给容器中导入这个场景需要的所有组件,并配置好这些组件,有了自动配置类,就免去了我们手动编写配置注入功能组件等工作了。
Springboot在启动的时候,从类路径下的META-INF/Spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置的工作,如下图。
快速创建SpringBoot项目
前面我们创建一个项目是,先创建一个Maven项目,然后导入相关的Springboot依赖,但是其实我们可以在idea中,利用Idea创建项目,帮我们自动创建我们需要的相关依赖的springboot项目
通过这一系列的操作,我们也创建出了一个已经导入依赖的SPringboot项目了,当然啦,如果还差什么,我们依旧可以在pom中导入依赖,所以其实没有差别,我个人喜欢直接创建一个Maven项目,需要什么就在官网上导入相关的依赖,这样方便我精简项目,以及项目使用了什么包心知肚明,我们在项目侧边栏lib中可以看到我们项目所有的依赖。
这里要特别说明的是,我们使用idea创建的项目里面的resources下面,会帮我们自动创建了三个东西,我这里说明一下。
- static:保存所有的静态资源,什么js、css之类的都在这下面
- templates:保存所有的模板页面,Springboot默认jar包使用的是嵌入式的Tomcat,默认不支持JSP页面,所以在模板这里,我们可以使用模板引擎,比如freemaker、thymeleaf之类的
- application.properties,这个是SpringBoot的配置文件。前面我们知道SpringBoot有很多默认配置,我们就可以在这个文件夹修改默认配置,比如端口之类的。
下一篇
这里我们算是对一个简单的HelloWord进行了了解,到此,我们也对SpringBoot庞大的技术世界说了一句HelloWord,那么下一篇博文,我将要讲讲SpringBoot的配置
更多推荐
所有评论(0)