一、配置绑定
1、作用说明
我们在开发springboot项目时,会有个配置文件,application.properties文件。
 我们知道,像什么访问端口、上传功能的相关配置,都会在这里进行配置。
 而这些,都是springboot自带的或者第三方jar包的属性。
那么,我们怎么给自己定义的Bean属性配置属性值了?
 这里,就用到配置绑定功能。
2、实现方式
2.1、@Component + @ConfigurationProperties方式(推荐使用)
自定义bean
@ToString
@Data
@Component
@ConfigurationProperties(prefix = "mycar")
public class Car {private String brand;private Integer price;}
application.properties文件中
mycar.brand=YD
mycar.price=100000
controller类中
    @AutowiredCar car;@RequestMapping("/car")public Car car(){return car;}
注意,使用@ConfigurationProperties注解,IDEA可能会报提示
 
 解决办法:
 File | Settings | Languages & Frameworks | Spring | Spring Boot
 
2.2、@EnableConfigurationProperties + @ConfigurationProperties方式
使用说明:
 这种方式,需要再配置类上使用@EnableConfigurationProperties注解,然后,在自定义bean上使用@ConfigurationProperties注解
配置类:
 
 bean:
 
二、自动配置功能源码解读
我们启动springboot项目的时候,就自动注册到IOC容器中很多的组件。
 那么,这是如何实现的?
 多少组件被注册?这些信息写在那个配置文件中了?组件的自定义配置怎么关联上的?
 带着这些问题,我们来学习一下springboot的自动配置功能源码。
1、从启动类开始
@SpringBootApplication这个注解等价于下面三个注解@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan("com.atguigu.boot")
1.1、@SpringBootConfiguration
这个注解被@Configuration标注,所以,它是个配置类。
 没什么内容。
 和注册组件没关系。
 
1.2、@ComponentScan
这个注解,我们都知道,是扫描包的路径。
 一般是针对于我们开发人员,在该路径下,加了注解的类,会被注册到容器中。
 所以,和springboot的内部组件注册无关。
1.3、@EnableAutoConfiguration
这个注解,实际上是负责springboot的自动配置功能的。
 它等价于下面两个注解:
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
1.3.1、@AutoConfigurationPackage
这个注解的作用是获取启动类的包路径,然后,进行用户组件扫描并注册。
 

 我们在124行打上断点。
 会发现,获取了启动类的包路径
 这就是,为什么我们的springboot默认扫描路径是启动类所在路径及其子路径。
 
1.3.2、@Import(AutoConfigurationImportSelector.class)
可以发现,这里的@Import注解,将spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面的一个类,注册到IOC容器中。
 
 我们,进入这个类中
 找到selectImports方法
 
 进入getAutoConfigurationEntry方法
 
 进入getCandidateConfigurations方法
 代码:
List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),getBeanClassLoader());