SpringBoot2:配置绑定与自动配置功能源码解读

2024-09-03 04:04

本文主要是介绍SpringBoot2:配置绑定与自动配置功能源码解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、配置绑定

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());

这篇关于SpringBoot2:配置绑定与自动配置功能源码解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1131969

相关文章

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java实现文件图片的预览和下载功能

《Java实现文件图片的预览和下载功能》这篇文章主要为大家详细介绍了如何使用Java实现文件图片的预览和下载功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... Java实现文件(图片)的预览和下载 @ApiOperation("访问文件") @GetMapping("

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

SpringKafka消息发布之KafkaTemplate与事务支持功能

《SpringKafka消息发布之KafkaTemplate与事务支持功能》通过本文介绍的基本用法、序列化选项、事务支持、错误处理和性能优化技术,开发者可以构建高效可靠的Kafka消息发布系统,事务支... 目录引言一、KafkaTemplate基础二、消息序列化三、事务支持机制四、错误处理与重试五、性能优

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤