学习记录:SpringBootApplication注解

SpringBootApplication注解

1.点开SpringBootApplication注解,很容易发现,上面一共有七个注解,其中四个是原注解,其余三个是和自动配置的注解,四个原注解这里就不多解释了,不懂的可以百度Java原注解相关知识

2.大致说下三个注解的用途
1.SpringBootConfiguration注解,表示这是一个配置类
2.SpringBootConfiguration注解,起到自动装配作用
3.ComponentScan注解,扫包
在这里插入图片描述

SpringBootConfiguration注解

点开SpringBootConfiguration注解,发现上面有四个注解,其中三个是原注解,只有一个Configuration注解是业务相关的注解,这个注解就好理解了,表示这是一个配置类,SpringBootConfiguration和Configuration起到相同的作用,SpringBootConfiguration是Spring Boot特意封装的一个注解
在这里插入图片描述

ComponentScan注解

这个注解没什么好说的,就是起到扫包的作用,Spring Boot1.x版本,只会扫启动类的子孙包下的所有注解,2.x版本会扫启动类以及子孙包下的所有版本,但是一般没有人把类建在和启动类平级的目录下

SpringBootConfiguration注解

在这里插入图片描述

1.可以看到,SpringBootConfiguration注解除去四个原注解,有两个业务相关注解,

AutoConfigurationImportSelector类

1.Selector,选择器,翻译过来就是自动配置导入选择器
跟到这个类里面看一下
在这里插入图片描述
2.注意getCandidateConfigurations这个方法,Candidate,候选人的意思,也就是获取待配置的方法,在这里打个断点
在这里插入图片描述
3.debug启动看一下,验证下猜想,查看下configurations这个list里面都有些什么
在这里插入图片描述
4.发现有118个类的绝对路径,这118个全路径是哪来的,继续跟代码,点开SpringFactoriesLoader.loadFactoryNames()方法
在这里插入图片描述
5.这里注意一下,getOrDefault()点进去会跳到Map.java这个类里面去,所以应该点开loadSpringFactories()方法,发现classLoader不为null的时候会加载第一个,这里就不打断点验证了,下面就是拿到文件路径后通过PropertiesLoaderUtils遍历了最后返回,看看FACTORIES_RESOURCE_LOCATION的值是什么
在这里插入图片描述
在这里插入图片描述
6.去jar里面查看META-INF/spring.factories文件,不难发现,key=value形式保存的,至于这里为什么是拿org.springframework.boot.autoconfigure.EnableAutoConfiguration的值,自己去在loadSpringFactories这里打断点看下就知道了,拖到最下面,发现一直到了139行,139-21=118,验证了上诉思想
在这里插入图片描述
7.那么Spring Boot自动配置已经清楚后,看看AutoConfigurationPackage注解做了一些什么

AutoConfigurationPackage注解

在这里插入图片描述
1.通过Import注解导入了一个内部类,AutoConfigurationPackages翻译过来打致是自动配置包,Registrar注册的意思
在这里插入图片描述
2.点开Registrar这个内部类发现重写了两个方法registerBeanDefinitions,注册定义bean,这个方法打个断点,重新debug启动一下
在这里插入图片描述
3.发现这里拿到了我们启动类所在的包

总结

学习之余随手记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值