SpringBoot"约定大于配置"

面试速记:

SpringBoot框架定义好的一套默认规则,通过预设默认规则,让你少写配置,专注于业务逻辑,这里的约定可以体现在以下三个方面:

1.做好默认配置,比如默认选择tomcat作为服务器

2.约定项目结构,比如扫描src/java/main下的代码作为源码,以及resource/static让框架能自动扫描到静态资源

3.通过application.yml简化自定义配置,只需要修改自己需要配置的参数,不需要重头配置

SpringBoot八股中有一个词就是"约定大于配置",可能是翻译诟病,总之本人看这个概念非常抽象,下面举一个例子来帮助理解,先给出概念定义:

约定大于配置是Spring Boot的核心设计理念,它通过预设合理的默认行为和项目规范,大幅减少开发者需要手动配置的步骤,从而提升开发效率和项目标准化程度。

举例

想象你买了一套精装房,开发商已经帮你铺好了地板、装好了门窗、配好了水电。你不需要自己从头设计水管怎么走、电线怎么铺,而是直接按默认的布局使用(预设合理的默认行为和项目规范)。如果某个地方不符合你的需求(比如想把厨房改成开放式),你再单独调整——这就是**"约定大于配置"**的核心思想。

所以可以看出"约定"即是框架定义好的一套默认规则,通过预设默认规则,让你少写配置,专注于业务逻辑

具体到 SpringBoot 中的应用:

  1. 默认做好配置选择 SpringBoot 预设了大量开发中的常见配置(比如数据库连接、Web服务器、日志等),你不需要手动写繁琐的 XML 或代码配置。比如:
    • 默认使用内嵌的 Tomcat 作为服务器。
    • 默认扫描 src/main/java 下的代码作为项目源码。
  2. 约定项目代码结构,自动生效 如果你遵守 SpringBoot 的约定(比如把代码放在特定的包名或目录下),框架会自动识别并生效功能。例如:
    • 把控制器类放在 com.example.demo.controller 包下,SpringBoot 会自动识别为 Web 控制器。
    • 按 Maven/Gradle 的标准目录结构存放代码,框架会自动找到资源文件。
  3. 简化配置,按需修改 如果你需要个性化配置(比如更换数据库或端口号),只需在 application.propertiesapplication.yml 中修改对应的参数即可,不需要推翻默认设定。

好处:

  • 提升开发效率:不用重复写模板化的配置代码。
  • 团队协作更统一:大家遵守相同的约定,代码结构更一致。
#java学习[话题]#
全部评论

相关推荐

电话面试(第一次电话面试,一般都是视频) 30-45分钟左右。面试官超级好,不会的会和你讲解。常规八股起手,由浅入深1 看我简历里写了RocketMQ,问我为什么项目里为什么用RabbitMq, 我分析了一下区别,说RabbitMq和spring集成更好,方便实现。RabbitMq速度好,能达到微秒级,就是吞吐量不如RocketMQ。RocketMQ适合分布式。 然后问我为什么速度快?没答出来。和我解释了一下 (Erlang 实现+异步写)。2 RocketMQ 组件,问我他们之间怎么连接 ,我只知道他们连接NameServe,不知道他们是长连接,然后聊了一下webSocket,短链接之类的。3 Jvm内存回收,直接八股开始吟唱 可达性分析+垃圾回收算法+分代回收。 被打断了,问我 elden区与suivival区内存比(我晕),Jvm启动时配置属性有哪些(寄 ),和我解释了 垃圾回收器(GC)配置+内存配置+日志与监控(懵了)4 看我项目用了redis ,怎么用: 缓存 + 分布式锁, 分布式锁怎么实现,为什么要有分布式锁,锁过期了怎么办(看门狗机制)。什么情况下会发生缓存雪崩、穿透、击穿,怎么解决 (参数校验+布隆+返回空值),(锁+设置合理过期时间),(随机设置过期时间)。上面我都举了我项目中的实际例子。5 设计模式 单例模式中双重校验锁怎么实现, 关键字, valatile+syncronized  valatile作用(防止指令重排序+可见性),new 对象三步( 分配内存+初始化零值+引用赋值) valatile防止指令重排序导致返回未初始化对象(我回答时往可见性方向走了 什么内存屏障,强制读取主内存什么的)。 类加载过程 ,双亲委派机制,类加载器在哪个包下(直接懵了)6 问了我Netty(听成了 .net 还以为c#呢) ,看我完全不懂,没问了。7 看出我是八股战神了,后面什么Mysql 索引为什么失效,索引过程什么的我就说我都会背,面试官就没问了。8 springboot启动过程,面试官直接说没看过源码说不清楚过程。直接说干了什么 。(导入bean @ SpringApplication启动实例,自动装载 META-INF/spring.factories 中配置的自动装配类,@EnableAutoConfiguration、@Configuration导入装配默认的 Spring Bean。@ComponentScan:自动扫描指定包及其子包中的 Spring 组件。)简而言之一句话,导入需要的bean。面试的过程中,对于我不懂的东西面试官会耐心的讲解,我有想法了也会直接反馈给面试官。整个面试过程不是单方面输出,更像是聊天。面试官说我没啥实际经验,不过实习生就是写写接口,不需要太会,基础够就行,面试官希望我能接触真实业务场景,也希望我能提高自己,不要仅限于八股。
查看13道真题和解析
点赞 评论 收藏
分享
评论
3
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务