从零开始的Spring Boot学习【三】【自动装配(二)】

讲它的实现原理的话,那我们从Spring Boot的注解开始讲起,在这之前我们要先了解它是以什么方式运作的。

Spring Boot将各个应用/第三方框架设置成了一个个场景“starter”,以后要用到哪一个,只需要引用那个场景就可以了。

https://docs.spring.io/spring-boot/docs/2.2.4.RELEASE/reference/html/using-spring-boot.html#using-boot-starter

在上述的链接,可以查看有关于Spring Boot的各种场景,里面有简介和相关的pom文件,pom文件时存放在了github中,像我们在一开始构建项目的时候,就是选择的web场景,如果忘记的小朋友可以返回去看我们的:Spring Boot学习【一】

我们所选择的web场景,简介上说是构建web的开始,所以这个场景对于我们来说,就是最基本的一个starter了。选完之后,Spring Boot就会将我们所需要的所有依赖自动注入。像web场景,spring boot就会将web相关的依赖(tomcat  json等) 全部引入本项目。

在我们的demo程序中,有一行这样的注解,@SpringBootApplication。

这个注解是SpringBoot框架最基本的一个注解(主配置类),需要用到它来标识这是一个Spring Boot程序,我们按住Ctrl点进去看看,看看这个类里面写了什么,在这个主配置类中,也是写了许多的注解,大家不用惊慌,看似很复杂,但是在我们寻其根源后,其实并不复杂。在众多注解中,我们主要介绍的是这两个:

@SpringBootConfiguration: 我们按住Ctrl,点进去看看,会发现它还包含了一个注解叫做@Configuration,表示“配置类”。

加了它的类就是一个配置类,加了@Configuration注解的类,会自动纳入Spring 容器中

例如:

@Configuration
public class A//表示A是一个 用于配置的类
{
}

@EnableAutoConfiguration:这个是自动配置的注解,你注意到了吗,像什么spring.xml,mybatisConfig.xml,springmvc.xml等等,我们都没有去配置过,那这个程序是怎么跑起来的?就依赖于这个注解,这个注解的功能是自动配置,即约定优于配置,如果我们事先已经约定好了一个方案,那么我们就不需要配置它。

按住Ctrl,我们点进去看一下。

在里面有一个@AutoConfigurationPackage注解,大家记得我们以前配置Spring的时候,需要写一个扫描器,要把Controller的包放入扫描器scan,我们之前就没有写,但是还是可以识别我们的Controller,在哪里做了这种操作呢?是的,在@AutoConfigurationPackage中做了。

因为@AutoConfigurationPackage是在@EnableAutoConfiguration注解中,我们把总的功能归结为@EnableAutoConfiguration的功能,它可以找到@SpringBootApplication所在类的包。作用:就会将该包及所有的子包全部纳入spring容器中。

在@EnableAutoConfiguration中还有一个注解要讲一下:

我们来区分一下。

@AutoConfigurationPackage//是引入自己写的包,即各种Controller

@Import(AutoConfigurationImportSelector.class)//则是引入的第三方jar包

那么它是怎么引入第三方jar包的呢?我们按住Ctrl点进去,我们按住ctrl+F,去寻找一个叫做selectImports的方法。

在这个方法里有一个获取自动配置的入口,我们按住Ctrl进去看看。

在这个方法里,还嵌套了一个方法获取候选的配置,即准备要配置的信息,我们按住Ctrl,继续往深处探寻。

在这个方法里,我们看到一个加载factory名字的方法,胜利就在不远处!我们继续按住Ctrl看看它最深层到底写了什么。

在这个方法里,我们终于看到了,获取资源的路径,这个是一个静态的不可变的常量,我们按住Ctrl进去。

原来是写了这么一句话,获取这个配置文件里面的信息,去装配第三方jar包。那么里面到底写了啥呢,我们下节再讲。关注博主,更多精彩哦!

上一章:从零开始的Spring Boot学习【二】【自动装配(一)】

下一章:从零开始的Spring Boot学习【四】【自动装配(三)】

发布了28 篇原创文章 · 获赞 29 · 访问量 8338

猜你喜欢

转载自blog.csdn.net/KnightHONG/article/details/104157109
今日推荐