@SpringBootApplication注解

一.
@SpringBootApplication
等同于
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")

二.

  1. @SpringBootConfiguration 可以理解为就是 @Configuration,没什么好说的
    因为点进@SpringBootConfiguration的源码会发现,就是 @Configuration

2.@EnableAutoConfiguration

这个注解是有以下两个注解合成的:
① @AutoConfigurationPackage #这个是把当前springboot项目下MainApplication下的包加载进IOC容器

② @Import(AutoConfigurationImportSelector.class) #批量导入一些组件到IOC容器。

注意,虽然都导入了,但是不一定全部生效,因为有可能依赖的其他组件目前在类路径下面没有,没有也不会报错,因为有@ConditionalOnxxx相关注解。这就是springboot牛逼的地方,如果没有这个注解,你调用相关的依赖,因为这些依赖缺少其他依赖,调用就会报错

注0:springboot启动时,会加载100多个配置类,就是通过@EnableAutoConfiguration这个注解来操作的。这个操作是在扫描业务代码之后做的。

扫描业务代码是怎么操作的?
答:先把所有业务代码加载进内存,然后找到对应的注解,把对应的类实例放进spring容器:这个是错误的,并不是先完整的加载一个类进内存。正确的请看:https://juejin.cn/post/6844904165320179719

注1:@Import(AutoConfigurationImportSelector.class) 导入的这些组件里面,大部分都是自动配置类

注2:每个配置类都会绑定配置文件里指定的值

  1. @ComponentScan 包扫描的注解,没什么好说的

三.

  1. @ComponentScan和@EnableAutoConfiguration的区别

详解:https://blog.csdn.net/wangbiao007/article/details/101020426
https://blog.csdn.net/qq_40091033/article/details/106100901

  1. @EnableAutoConfiguration
    @EnableAutoConfiguration里面最有作用的就是:@Import({AutoConfigurationImportSelector.class})

详解:
https://blog.csdn.net/qq_36872046/article/details/83662761

四.

@ComponentScan这个注解是会扫描第三方包路径的。当然,如果你不加参数,它默认扫描的启动类及其子目录的路径,这样肯定扫描不到第三方jar包了

你可能感兴趣的:(@SpringBootApplication注解)