@SpringBootApplication详解

一、@SpringBootApplication注解介绍

@SpringBootApplication这个注解是springboot启动类上的一个注解,是一个组合注解,也就是由其他注解组合起来,它的主要作用就是标记说明这个类是springboot的主配置类,springboot可以运行这个类里面的main()方法来启动程序

在这里插入图片描述

这个注解主要由三个子注解组成:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

 二、@SpringBootConfiguration介绍

这个注解包含了@Configuration,@Configuration里面又包含了一个@Component注解,也就是说,这个注解标注在哪个类上,就表示当前这个类是一个配置类,而配置类也是spring容器中的组件

@SpringBootConfiguration注解包含:

在这里插入图片描述

@Configuration注解包含: 

在这里插入图片描述

三、@ComponentScan介绍

包扫描注解:@ComponentScan 的作用就是根据定义的扫描路径,把符合扫描规则的类装配到spring容器中

四、@EnableAutoConfiguration介绍

这个注解是开启自动配置的功能,里面包含了两个注解

  • @AutoConfigurationPackage
  • @Import(AutoConfigurationImportSelector.class)

4.1  @AutoConfigurationPackage

它会自动扫描@SpringBootApplication注解所在类所在的包,并将该包及其子包下的所有组件加载到spring的容器中。

这个注解的作用说白了就是将主配置类(@SpringBootApplication标注的类)所在包以及子包里面的所有组件扫描并加载到spring的容器中,这也就是为什么我们在利用springboot进行开发的时候,无论是Controller还是Service的路径都是与主配置类同级或者次级的原因

4.2  @Import(AutoConfigurationImportSelector.class)

1.利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件

在这里插入图片描述
2.调用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类 


3.利用工厂加载 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件

在这里插入图片描述
4.关键就在这个loadSpringFactories()方法里面,在这个方法里,它会查找所有在META-INF路径下的spring.factories文件,从META-INF/spring.factories文件中找到所有的对应配置类,然后将这些自动配置类加载到spring容器中。

在这里插入图片描述


默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件
spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories 

虽然我们127个场景的所有自动配置启动的时候默认全部加载,但是xxxxAutoConfiguration按照条件装配规则(@Conditional),最终会按需配置。

AopAutoConfiguration类:

@Configuration(
    proxyBeanMethods = false
)
@ConditionalOnProperty(
    prefix = "spring.aop",
    name = "auto",
    havingValue = "true",
    matchIfMissing = true
)
public class AopAutoConfiguration {
    public AopAutoConfiguration() {
    }
	...
}

  • 6
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@SpringBootApplication是一个复合注解,用于标注Spring Boot应用的主配置类。它包含了三个核心注解:@SpringBootConfiguration、@EnableAutoConfiguration和@ComponentScan。其中,@SpringBootConfiguration注解表示这个类是Spring Boot的主配置类,Spring Boot应该运行这个类的main方法来启动应用。@EnableAutoConfiguration注解用于自动配置Spring Boot应用的配置信息,它会根据classpath下的依赖自动配置Spring应用的各种组件。@ComponentScan注解用于扫描指定包及其子包下的所有组件,并将它们注册到Spring容器中。通过这三个注解的组合,@SpringBootApplication实现了自动配置和组件扫描的功能,简化了Spring Boot应用的配置过程。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [@SpringBootApplication详解](https://blog.csdn.net/cai_ing/article/details/108311119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [@SpringBootApplication详解(Spring Boot启动原理)](https://blog.csdn.net/qq_31960623/article/details/118183099)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [@SpringBootApplication原理分析](https://blog.csdn.net/wdw66666/article/details/107783335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值