前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >今天来聊聊SpringBoot的自动配置吧?

今天来聊聊SpringBoot的自动配置吧?

作者头像
Java3y
发布于 2023-01-08 08:54:02
发布于 2023-01-08 08:54:02
3350
举报
文章被收录于专栏:Java3yJava3y

面试官:好久没见,甚是想念。今天来聊聊SpringBoot的自动配置吧?

候选者:嗯,SpringBoot的自动配置我觉得是SpringBoot很重要的“特性”了。众所周知,SpringBoot有着“约定大于配置”的理念,这一理念一定程度上可以用“SpringBoot自动配置”来解释。

候选者:SpringBoot自动配置的原理理解起来挺简单的,我们在使用SpringBoot的时候,肯定会依赖于autoconfigure这么一个包

候选者:autoconfigure这个包里会有一个spring.factories文件,该文件定义了100+个入口的配置类。比如我们经常使用的redis、kafka等等这样常见的中间件预置了配置类

候选者:当我们在启动SpringBoot项目的时候,内部就会加载这个spring.factories文件,进而去加载“有需要”的配置类。那我们在使用相关组件的时候,就会非常的方便(因为配置类已经初始化了一大部分配置信息)。

候选者:一般我们只要在application配置文件写上对应的配置,就能通过各种template类直接操作对应的组件啦。

面试官:那是所有的配置类都会加载吗?这个“有需要”的配置类你是怎么理解的?

候选者:不是所有的配置类都会加载的,假设我们没有引入redis-starter的包,那Redis的配置类就不会被加载。具体Spring在实现的时候就是使用 @ConditionalXXX进行判断的。比如Redis的配置类就会有@ConditionalOnClass({RedisOperations.class})的配置,说明当前环境下如果有RedisOperations.class这个字节码,才会去加载Redis的配置类

面试官:哦,这样啊,那了解了。那你知不知道Redis的配置类其实会有初始化RedisTemplate对象的操作,那假设我们没有引入redis-starter包,那他是怎么通过编译的?(当然了,其他的配置类也是有可能有一样的状况)

候选者:嗯,这个我看源码的时候我也发现了。其实就是在autoconfigure包里会定义到相关的依赖,但只是标记为optional并且只在编译环境有效。那这样是能通过编译的,只是不会将其依赖传入到我们的应用工程里

候选者:这块还是花了我很多时间的,我最后在GitHub 的SpringBoot源码里找到的。

面试官:嗯啊,有点东西的哟。既然都聊到这块了,要不顺便聊聊你对SpringBoot starter的理解?

候选者:嗯,starter这东西就是为了方便调用方去使用相关的组件的嘛,Spring框架也给我们实现了很多好用的starter。

候选者:比如以前我们要用Mybatis框架,可能会引入各种的包才能使用。而starter就是做了一层封装,把相关要用到的jar都给包起来了,并且也写好了对应的版本。这我们使用的时候就不需要引入一堆jar包且管理版本类似的问题了。

候选者:现在很多开源的组件都会提供对应的springboot-starter包给我们去用,要做一个starter包并不难。参照Spring内置的实现就好了:1、在工程里引入 starter 打包相关的依赖。2、在我们工程内建spring.factories文件,编写我们配置类的全限类名。

面试官:嗯,大致都了解了,可以的。最后聊下你是怎么看这块源码的?

候选者:源码具体大概就不记得了,思路倒是还有的。我先从启动类开始,会有个@SpringBootApplication,后面会定位到一个自动配置的注解@EnableAutoConfiguration,那最后就能看到注解内部会去META-INF/spring.factories加载配置类

候选者:这块源码并不难,这个过程也了解到了原来maven有option和scope这俩标签,但确实是SpringBoot比较重要的概念吧。

面试官:好嘞,今天到这就结束了吧。

题外:这个问题确实被问到过几次。说实在的,对于Spring类、注解的信息我真的记不住。感觉能答出这个流程思路,也就够用了(如果面试官确实是要细究某个类名,那这种公司不去也罢)

约定大于配置:SpringBoot给我们内置了很多配置类,这些配置类也初始化了很多配置(默认值)。当我们要使用的时候,只需要覆盖这些配置项就完事了。即便我们不写,大多数情况下都不需要由我们显示配置出来,但相关组件就能正常访问了。

对线面试官系列继续连载啦!还有什么常见的面试题,我还没写的,可以在评论区留言

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java3y 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一篇文章聊透SpringBoot的自动配置
派大星:嗯,SpringBoot的自动配置我觉得是SpringBoot很重要的“特性”了。众所周知,SpringBoot有着“约定大于配置”的理念,这一理念一定程度上可以用“SpringBoot自动配置”来解释。
@派大星
2023/10/07
1730
一篇文章聊透SpringBoot的自动配置
【愚公系列】2023年10月 Java教学课程 167-SpringBoot自动配置(自定义starter)
@EnableAutoConfiguration是一个Spring Boot注解,它会根据项目中所引入的依赖自动配置Spring应用程序。
愚公搬代码
2025/05/28
550
【愚公系列】2023年10月 Java教学课程 167-SpringBoot自动配置(自定义starter)
Springboot面试题一
starter是一种服务,使用某个功能的开发者不需要关注各种依赖库的处理,不需要具体的配置信息,由Spring Boot自动通过classpath路径下的类发现并加载需要的Bean。
全栈程序员站长
2022/08/31
4120
Springboot面试题一
Java基础知识点【Spring、Spring MVC、Spring Boot】进阶篇
最大的好处:代码复用,减少重复代码。除了子类要实现的特定方法,其他方法及方法调用顺序都在父类中预先写好了。
@派大星
2023/10/02
4770
springboot自动配置原理
这个文件里放的全是自动配置类的名称,主程序启动时就通过注解将这些自动类配置类全部加载,有了这些配置类,就省去我们写配置文件
阿珍
2025/01/20
840
springboot自动配置原理
SpringBoot自动装配
自动装配是 SpringBoot 的核心功能,主要是让开发者尽可能少的关注一些基础化的 Bean 的配置,实际上完成的工作是如何自动将 Bean 装载到 Ioc 容器中。
政采云前端团队
2023/11/01
3380
SpringBoot自动装配
面试官:给我讲讲SpringBoot的依赖管理和自动配置?
从Spring转到SpringBoot的xdm应该都有这个感受,以前整合Spring + MyBatis + SpringMVC我们需要写一大堆的配置文件,堪称配置文件地狱,我们还要在pom.xml文件里引入各种类型的jar包,Mybatis的、SpringMVC的、Spring-aop的,Spring-context等等。
秃头哥编程
2021/07/14
9420
面试官:给我讲讲SpringBoot的依赖管理和自动配置?
springboot面试杀手锏-自动配置原理
随着互联网越来越流行,springboot已经成为我们无论是工作,还是面试当中,不得不掌握的技术。说起springboot笔者认为最重要的功能非自动配置莫属了,为什么这么说?如果参与过以前spring复杂项目的朋友肯定,有过这样的经历,每次需要一个新功能,比如事务、AOP等,需要大量的配置,需要导出找jar包,时不时会出现jar兼容性问题,可以说苦不堪言。
苏三说技术
2020/10/15
3870
springboot面试杀手锏-自动配置原理
面试 – 如何编写一个SpringBoot-Starter?
刚毕业第一批面试的时候,被问过如何手写MVC框架,但是感觉面试官在扯淡,我刚毕业的CRUD,你非要写尼玛MVC框架?面试第二家公司的时候遇到:如何手写SpringBoot-Starter?我感觉一样扯淡,我有必要写Boot-Starter么?但为了丰富技术点,当天晚上就研究一下,如何手写Boot-Starter?
收心
2022/09/27
3530
SpringBoot自动装配
对于所有的依赖我们需要在父项目中设置版本号等都设置好了,在子项目中就不需要再配置版本
用户11097514
2024/05/30
850
SpringBoot自动装配
【Spring Boot 源码学习】RedisAutoConfiguration 详解
上篇博文,Huazie 带大家从源码角度分析了 Spring Boot 内置的 http 编码功能,进一步熟悉了自动配置的装配流程。本篇趁热打铁,继续带大家分析 Spring Boot 内置的有关 Redis 的自动配置类【RedisAutoConfiguration】。
huazie
2024/05/12
4630
【Spring Boot 源码学习】RedisAutoConfiguration 详解
从0到1带你实现一个分布式锁组件
🍱 本篇收录完整代码地址:https://gitee.com/diqirenge/seven-lock-starter 🍱
第七人格
2024/07/01
1100
从0到1带你实现一个分布式锁组件
SpringBoot---(21)核心原理:自动化配置2
继续追SpringFactoriesLoader类中的loadFactoryNames这个方法--->
IT云清
2019/01/22
4570
springboot面试杀手锏-自动配置原理
随着互联网越来越流行,springboot已经成为我们无论是工作,还是面试当中,不得不掌握的技术。说起springboot笔者认为最重要的功能非自动配置莫属了,为什么这么说?如果参与过以前spring复杂项目的朋友肯定,有过这样的经历,每次需要一个新功能,比如事务、AOP等,需要大量的配置,需要导出找jar包,时不时会出现jar兼容性问题,可以说苦不堪言。
苏三说技术
2020/10/09
1.2K0
springboot面试杀手锏-自动配置原理
阿里面试:看你springBoot用的比较溜来,说说springboot自动装配是怎么回事?
最近有个读者在面试,面试中被问到了这样一个问题“看你项目中用到了springboot,你说下springboot的自动配置是怎么实现的?”这应该是一个springboot里面最最常见的一个面试题了。下面我们就来带着这个问题一起解剖下springBoot的自动配置原理吧。
java金融
2020/07/25
8130
阿里面试:看你springBoot用的比较溜来,说说springboot自动装配是怎么回事?
导图梳理springboot手动、自动装配,让springboot不再难懂
在学springboot之前,你必须有spring、spring mvc基础,springboot的诞生其实就是用来简化新Spring应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
java思维导图
2019/09/19
1.9K0
导图梳理springboot手动、自动装配,让springboot不再难懂
SpringBoot(一)自动配置
我以自动配置为SpringBoot的第一篇章,是因为从SpringMvc到SpringBoot,它实现了零配置,并出现了很多默认配置,在进行后面的源码理解时可能会有部分地方不理解,念头不通达,所以先将自动配置这部分给了解清楚,知道它的一个配置是怎么加载的,对后面的学习应该会更流畅一点。
用针戳左手中指指头
2022/11/07
5360
SpringBoot(一)自动配置
Springboot中的面试题你能接几招?
application.yml 或 application.properies
一缕82年的清风
2021/12/06
3720
SpringBoot 自动装配原理,看不懂不存在的
🍁 作者:知识浅谈,CSDN签约讲师,CSDN原力作者,后端领域优质创作者,热爱分享,热爱创作 📌 擅长领域:后端全栈工程师、爬虫、ACM算法 面试官常问的问题: 什么是 SpringBoot 自动装配? SpringBoot 是如何实现自动装配的?如何实现按需加载? 🤞这次都给他拿下🤞 为什么 Spring Boot 使用起来这么酸爽呢? 这得益于其自动装配。 正菜来了🛴🛴🛴 🍖什么是 SpringBoot 自动装配? 我们现在提到自动装配的时候,一般会和 Spring Boot 联系在一起。但是,
知识浅谈
2022/07/12
8711
SpringBoot 自动装配原理,看不懂不存在的
图解源码 | SpringBoot中自动配置原理
最近一些朋友问到,之前的Dubbo源码系列还会不会更新.答案是,后续会升级"Dubbo源码解析系列-plus"版本.不要问我这个plus有多大,暂时还不会大到一只手无法掌控.
Java技术江湖
2019/09/25
5930
图解源码 | SpringBoot中自动配置原理
推荐阅读
相关推荐
一篇文章聊透SpringBoot的自动配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档