用过springboot的人都知道。它的核心注解@SpringBootApplication以及run方法。那springboot为什么不需要配置xml。可以说是零配置。
首先我们来看看主启动类:
![主启动类只有@SpringBootApplication这个注解](https://i-blog.csdnimg.cn/blog_migrate/3a561ab39ca7dffbc52d279d27b161ea.png)
我们进入@SpringBootApplication:。
![进入@SpringBootApplication看到的注解](https://i-blog.csdnimg.cn/blog_migrate/376a4b8c0ad84af0a18cd3ede2da0a20.png)
这里我们重点看@SpringBootConfiguration ,@EnableAutoConfiguration,@ComponentScan。springboot官方文档,也对这三个注解,进行了详细的说明。官方文档
我们先来看看 @SpringBootConfiguration这个注解
![进入@SpringBootConfiguration看到的](https://i-blog.csdnimg.cn/blog_migrate/3ade3b8401965b51bd543cee4634ad34.png)
我们可以看到除了,原来的那些注解外。就多了一个@configuration注解。用过的都知道@configuration的作用是什么。它是让我们能够去注册一些额外的Bean,并且导入一些额外的配置。@Configuration还有一个作用就是把该类变成一个配置类,不需要额外的XML进行配置。所以@SpringBootConfiguration就相当于@Configuration。说白了,以前的xml配置。在springboot中我们用打上@configuration这个注解的类来代替。
我们在看@EnableAutoConfiguration:
![进入@EnableAutoConfiguration这个注解看到的](https://i-blog.csdnimg.cn/blog_migrate/e244dcc03495b060c7bfe46ffb9bea1c.png)
可以看到,除原来的注解外。多个两个:
@AutoConfigurationPackage,@Import(AutoConfigurationImportSelector.class)
先来说一下这两个注解的作用。
@AutoConfigurationPackage:让包中的类以及子包中的类能够被自动扫描到spring容器中。
@Import(AutoConfigurationImportSelector.class):这个是自动配置的核心,我们说自动配置,那他到底帮我们配置了什么,怎么配置的?我们就来看看这个注解:
![进入AutoConfigurationImportSelector类](https://i-blog.csdnimg.cn/blog_migrate/e2e537715b62da622fa0b548ac735138.png)
这里可以看到它实现了好多接口。在之前版版本,AutoConfigurationImportSelector这个类叫EnableAutoConfigurationImportSelector。之前我们进去看,他是继承了 AutoConfigurationImportSelector,这个类。但是2.1.1以上版本。就直接是AutoConfigurationImportSelector而不是EnableAutoConfigurationImportSelector。
我们重点看一里面的一个方法:内容较多
方法名是 selectImports
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b5002ec4349d1e141c7490dbdf8f2616.png)
这个类会帮你扫描那些类自动去添加到程序当中。我们可以看到getCandidateConfigurations()这个方法,他的作用就是引入系统已经加载好的一些类,到底是那些类呢,我们点进去看一下![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5fb426e008cffeb2a555896c5090f5f5.png)
这个类回去寻找的一个目录为META-INF/spring.factories,也就是说他帮你加载让你去使用也就是在这个META-INF/spring.factories目录装配的:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8e67cc7018a337244eab051c24ce3e47.png)
我们点进spring.factories来看:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ec0474df9c89673aff2bf3fe305bf0a4.png)
我们可以发现帮我们配置了很多类的全路径,我随便标记了一个。
@EnableAutoConfiguration主要作用就是让你自动去配置,但并不是所有都是创建好的,是根据你程序去进行决定。
我在来看最后这个注解:@ComponentScan
这个注解大家应该都不陌生,扫描包,放入spring容器,那他在springboot当中作用就仅是扫描包那么简单吗?,这个注解要结合SpringBootConfiguration去使用,能选择性的加载需要的类。而不是全部加载。因为内存是有限的。相当于做了一些优化。
总的来说。@SpringbootApplication 他已经把很多东西准备好,具体是否使用取决于我们的程序或者说配置。
就分享到这里。
作者:李陆喜
来源:CSDN
原文:https://blog.csdn.net/weixin_43783718/article/details/90345369
版权声明:本文为博主原创文章,转载请附上博文链接!