Spring Boot “约定大于配置”

news/2025/2/20 23:44:36/

什么是“约定大于配置”?

“约定大于配置”是一种简化开发的设计理念。简单来说,就是框架默认提供了常见的配置和行为,开发者只需要按照约定来编写代码,避免了繁琐的配置,只在需要时进行定制和调整。这种理念在Spring Boot中被充分体现,开发者可以专注于业务逻辑的开发,而不必在配置文件中花费大量精力

在Spring Boot中,这一理念通过自动配置(Auto Configuration)和默认约定得到了广泛应用,极大地简化了应用的搭建过程

Spring Boot 如何实现“约定大于配置”
  1. 自动配置
    Spring Boot 的核心特性之一就是自动配置(Auto Configuration)。通过自动配置,Spring Boot会自动猜测和配置你所需要的组件。例如,假如你在类路径下包含了H2数据库的依赖,Spring Boot会自动配置一个内存中的H2数据库连接,不需要开发者手动配置数据源。如果没有找到合适的配置,Spring Boot也会给出默认的配置行为

  2. 内嵌服务器
    Spring Boot 默认使用内嵌的Web服务器(如Tomcat、Jetty或Undertow)。这意味着开发者无需再手动配置Web服务器相关的bean,也不需要将其作为独立的应用部署在外部服务器上。你只需要创建一个 SpringApplication.run(Application.class, args),Spring Boot会自动完成启动、配置和运行的所有过程

  3. 默认约定的目录结构
    Spring Boot 提供了默认的目录结构,如:

    • src/main/java 用于存放Java源代码
    • src/main/resources 用于存放配置文件
    • src/test 用于存放测试代码
      Spring Boot会默认按照这些目录结构来扫描和加载相关的文件,开发者不必做额外配置。
  4. 默认配置
    Spring Boot的许多功能都有合理的默认配置。比如,Spring Boot自动根据你的应用依赖来配置常见的Bean和设置,如JPA、Web、Security等。如果你不做任何修改,它会自动启动并运行在默认配置下。这些默认值都能满足大多数开发场景,只有在业务上有特殊要求时才需要进行定制

  5. Spring Boot Starter
    Spring Boot 提供了大量的 "Starter" 依赖(如spring-boot-starter-web, spring-boot-starter-data-jpa等),这些 Starter 包含了一些典型的配置和常见的第三方库,使得开发者不必关心各种库的配置细节,只需要引入对应的 Starter 依赖即可。这种约定极大地降低了配置的复杂度

约定大于配置的优势
  1. 减少配置量
    Spring Boot 的“约定大于配置”原则大大减少了开发时需要书写和管理的配置文件。你不必每次都进行复杂的配置,只需根据实际需要修改个别参数即可

  2. 提高开发效率
    Spring Boot 提供了丰富的默认行为,使得开发者可以在短时间内搭建和启动应用,尤其是对于大多数常见的应用场景,Spring Boot 可以通过默认配置直接满足需求。开发者可以将更多的精力放在业务逻辑和功能实现上,而非基础设施的配置

  3. 降低错误率
    通过约定,开发者减少了自定义配置的复杂度,减少了配置错误的风险。例如,Spring Boot 的自动配置可以自动绑定数据库连接信息,避免了手动配置时可能产生的错误

  4. 更易于上手
    对于初学者来说,Spring Boot 提供的默认配置和自动配置可以让他们快速入门,不必理解框架内部的复杂配置和参数。即使是没有深入了解Spring框架的人,也能够通过遵循Spring Boot的约定来开发应用

  5. 可扩展性
    在Spring Boot中,开发者可以根据需要轻松覆盖默认配置。如果某些默认行为不符合需求,可以通过自定义配置来调整或替代。比如,数据库的配置、Web服务器的配置等,都可以通过配置文件或代码来覆盖

约定大于配置的潜在问题

虽然“约定大于配置”原则带来了许多好处,但在一些情况下,也可能带来潜在的问题:

  1. 过度简化
    Spring Boot 提供的自动配置虽然简化了很多开发流程,但有时也会隐藏一些细节,可能导致开发者对框架的运行原理了解不够深入,出现依赖于默认配置的情况。这对于一些复杂的应用场景可能不够灵活,需要开发者深入学习和调整

  2. 无法满足特殊需求
    如果应用的需求比较特殊或与框架的默认配置不兼容,开发者可能需要手动配置和覆盖大量的默认行为。过多的自定义配置可能使得项目变得难以维护和管理

  3. 依赖于约定
    如果开发者在项目中没有遵循Spring Boot的约定,就会失去框架的自动配置优势。比如,如果你没有按照Spring Boot默认的包结构来组织代码,框架可能无法自动扫描你的bean

如何调整Spring Boot的默认行为?

尽管Spring Boot遵循“约定大于配置”的原则,但在某些场景下,我们仍然可以根据需求进行调整:

  1. 修改application.propertiesapplication.yml 文件
    Spring Boot允许开发者通过配置文件来覆盖默认配置。例如,修改数据库连接、日志级别、端口号等配置项。你只需在配置文件中声明新的值,框架会自动读取并生效

  2. 使用自定义的自动配置
    开发者可以创建自定义的自动配置类来覆盖或扩展默认的自动配置行为。通过使用 @EnableAutoConfiguration@Configuration 注解,开发者可以自己定义一些自动配置逻辑,灵活定制应用的行为

  3. 显式配置
    如果开发者不希望使用自动配置功能,可以通过 @EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class}) 排除某些自动配置,或者直接使用显式配置


http://www.ppmy.cn/news/1572793.html

相关文章

T-Sql 打印所有用户表的建表脚本

-- 声明一个变量用于存储表名 DECLARE TableName NVARCHAR(128); -- 声明一个游标,用于遍历所有用户表 DECLARE TableCursor CURSOR FOR SELECT name FROM sys.tables WHERE type U; -- 打开游标 OPEN TableCursor; -- 从游标中获取第一行数据 FETCH NEXT FROM Ta…

无人机航迹规划: 梦境优化算法(Dream Optimization Algorithm,DOA)求解无人机路径规划MATLAB

一、梦境优化算法 梦境优化算法(Dream Optimization Algorithm,DOA)是一种新型的元启发式算法,其灵感来源于人类的梦境行为。该算法结合了基础记忆策略、遗忘和补充策略以及梦境共享策略,通过模拟人类梦境中的部分记忆…

【开源免费】基于Vue和SpringBoot的旅游管理系统(附论文)

本文项目编号 T 229 ,文末自助获取源码 \color{red}{T229,文末自助获取源码} T229,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

基于Swift实现拼图游戏

写了个拼图游戏,探讨一下相关的 AI 算法。拼图游戏的复原问题也叫做 N 数码问题。 拼图游戏N 数码问题广度优先搜索双向广度优先搜索A*搜索 游戏设定 实现一个拼图游戏,使它具备以下功能: 自由选取喜欢的图片来游戏自由选定空格位置空格邻…

【Python爬虫(4)】揭开Python爬虫的神秘面纱:基础概念全解析

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取&#xff…

Spring事务失效的几种场景

往期推荐 符号引用和直接引用、强引用、软引用、弱引用、虚引用-CSDN博客 已老实!再学消息队列、死信队列-CSDN博客 synchronized如何实现可重入,和Lock区别-CSDN博客 Mysql索引失效的几种场景、回表、索引覆盖、索引下推-CSDN博客 1. 未启用Spring事务管…

吃瓜教程Day2笔记

作为“西瓜书”介绍机器学习模型的开篇,线性模型也是机器学习中最为基础的模型,很多复杂模型 均可认为由线性模型衍生而得,无论是曾经红极一时的支持向量机还是如今万众瞩目的神经网络,其中都有线性模型的影子。 本章的线性回归和…

火爆的DeepSeek大模型怎么和智能家居结合?

DeepSeek作为AI大模型,与智能家居结合可以带来更智能、个性化和自然交互的体验,以下是几种可能的结合方式及场景示例: 自然语言控制中枢 场景示例:用户说“我有点冷”,DeepSeek自动调高空调温度并关闭风扇;…