SpringBoot 自动配置的原理|学习笔记

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 快速学习 SpringBoot 自动配置的原理

开发者学堂课程【SpringBoot 实战教程 SpringBoot 自动配置的原理】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/651/detail/10777


SpringBoot 自动配置的原理


1、既然 springboot 可以根据 pom 中依赖的 jar 包进行自动配置那说明在项目启动时已经进行了配置而项目启动的入口就是 main 方法使用的是 springapplication.run 方法进行启动源码在 springapplication 里面找

2、当项目启动时它首先执行的初始化方法叫 initialize这个方法里面调用 setinitializers这个方法里面调用了 getspringfactoriesinstances这个方法调用 loadfactorynames,( FACTORIES RESOURCE LOCATION) 这是符号常量在当前类中找一下它代表的是"META- INF/spring. Factories"找一下这个文件在依赖下这个是 spring 自动配置的 jar 包有个 meta-inf下面有一个 spring. Factories也就是首先它加载 META- INF/spring. Factories 这个文件

image.png

3、spring. Factories 这个文件里面又很多auto configiuration 自动配置boot configiuration 包名,autoconfigiurationimportfilter 类名后面是\。有 aop 的都是实现自动配置所实现的包和类名再比如 redis.redisautoconfigiuration它去读取文件就知道每一个需要自动配置所对应配置类的包和类名再看源码它加载 getsystemreources 文件实际上对每一个进行实例化 createspringfactoriesinstances也就是它要根据配置文件中的类进行实例化因为它要自动配置这里是每一项对应的自动配置的 class所以它要找到这些配置进行实例化

4、比如程序里面整合 redisspringboot 要对 redis 进行自动配置找到包再找 到 class把这个 class 进行实例化就是创建对象

image.png

5、它用了一个注解叫 @conditionlonclass需要满足在当前环境下存在 jedisconnection.class 和 redisoperations.class 以及 jedis.class 三个类才会对 redisautoconfiguration 的 class 进行实例化实例化的同时就可以进行自动化的配置需要指定端口号在哪个数据库里存这里面有一个成员 redisproperties这里面就是 redis 的默认配置有哪个数据存到数据库里面url 和 host有的是有默认值连接 redis 的密码连接 redis 的端口号默认是6379。

image.png

6、如果没有在 application 全局配置文件中进行配置redis 采用的都是默认配置,ConfigurationProperties 是类型安全的配置如果在 application 全局配置中配置了它就会在全局配置文件中读取以 spring.redis 开头的就把自定义配置覆盖默认配置否则用的就是默认的配置这个就是 springboot 自动配置的原理就是它读取 spring.factories 文件根据文件找到这些类进行实例化根据类中的属性默认使用的都有默认值

相关文章
|
21天前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
|
3月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
744 0
|
3月前
|
Java Spring
Spring Boot配置的优先级?
在Spring Boot项目中,配置可通过配置文件和外部配置实现。支持的配置文件包括application.properties、application.yml和application.yaml,优先级依次降低。外部配置常用方式有Java系统属性(如-Dserver.port=9001)和命令行参数(如--server.port=10010),其中命令行参数优先级高于系统属性。整体优先级顺序为:命令行参数 > Java系统属性 > application.properties > application.yml > application.yaml。
583 0
|
14天前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
203 4
|
21天前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
探索Spring Boot的@Conditional注解的上下文配置
|
2月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
709 10
|
7月前
|
缓存 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
本文介绍了在Spring Boot中配置Swagger2的方法。通过创建一个配置类,添加`@Configuration`和`@EnableSwagger2`注解,使用Docket对象定义API文档的详细信息,包括标题、描述、版本和包路径等。配置完成后,访问`localhost:8080/swagger-ui.html`即可查看接口文档。文中还提示了可能因浏览器缓存导致的问题及解决方法。
736 0
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档——Swagger2 的配置
|
3月前
|
前端开发 Java 数据库连接
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
|
7月前
|
Java 关系型数据库 数据库
微服务——SpringBoot使用归纳——Spring Boot事务配置管理——Spring Boot 事务配置
本文介绍了 Spring Boot 中的事务配置与使用方法。首先需要导入 MySQL 依赖,Spring Boot 会自动注入 `DataSourceTransactionManager`,无需额外配置即可通过 `@Transactional` 注解实现事务管理。接着通过创建一个用户插入功能的示例,展示了如何在 Service 层手动抛出异常以测试事务回滚机制。测试结果表明,数据库中未新增记录,证明事务已成功回滚。此过程简单高效,适合日常开发需求。
934 0
|
7月前
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
96 0