Spring Boot “约定大于配置”

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

“约定大于配置”是一种简化开发的设计理念。简单来说,就是框架默认提供了常见的配置和行为,开发者只需要按照约定来编写代码,避免了繁琐的配置,只在需要时进行定制和调整。这种理念在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.rhkb.cn/news/22490.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML之JavaScript DOM简介

HTML之JavaScript DOM简介 DOM对象是一个树形对象 DOM树上的结点类型分类&#xff1a; 元素节点 element 标签属性节点 attribute 属性文本节点 text 双标签中间的文本 HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UT…

【MATLAB例程】RSSI/PLE定位与卡尔曼滤波NLOS抑制算法,附完整代码

本 MATLAB 代码实现了基于接收信号强度指示(RSSI)和路径损耗模型(PLE)的定位算法,并结合卡尔曼滤波技术进行非视距(NLOS)干扰抑制。通过模拟真实运动轨迹,代码展示了如何在存在NLOS干扰的情况下进行有效的定位。订阅专栏后,可阅读完整代码,可直接运行 文章目录 运行结…

使用IDEA提交SpringBoot项目到Gitee上

登录Gitee并新建仓库 创建本地仓库 提交本地代码到本地仓库 提交本地代码到远程仓库

LLM Agent:PaSa

阅读原文 LLM Agent&#xff1a;PaSa 以 PaSa&#xff08;Paper Search&#xff09;为例&#xff0c;接下来将介绍由 LLM 驱动的先进的论文搜索智能体。PaSa 能够自主做出一系列决策&#xff0c;包括调用搜索工具、阅读论文以及选择相关参考文献&#xff0c;最终为复杂的学术…

Linux提权之脏牛Dirty COW CVE-2016-5195 (四)

CVE-2016-5195&#xff08;Dirty Cow脏牛&#xff09; 脏牛提权的利用方式不同于其他的内核溢出提权&#xff0c;这里单独记录 脏牛是一个非常经典的内核提权漏洞&#xff0c;存在Linux内核中已经有长达9年的时间&#xff0c;在2007年发布的Linux内核版本中就已经存在此漏洞&…

基于SpringBoot+vue+uniapp的智慧旅游小程序+LW示例参考

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

【微服务】深入解析spring aop原理

目录 一、前言 二、AOP 概述 2.1 什么是AOP 2.2 AOP中的一些概念 2.2.1 aop通知类型 2.3 AOP实现原理 2.3.1 aop中的代理实现 2.4 静态代理与动态代理 2.4.1 静态代理实现 三、 jdk动态代理与cglib代理 3.1 jdk动态代理 3.1.1 jdk动态代理模拟实现 3.2 CGLIB 代理…

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体

vxe-table 如何实现跟 Excel 一样的数值或金额的负数自动显示红色字体&#xff0c;当输入的值为负数时&#xff0c;会自动显示红色字体&#xff0c;对于数值或者金额输入时该功能就非常有用了。 查看官网&#xff1a;https://vxetable.cn gitbub&#xff1a;https://github.co…

C++:dfs,bfs各两则

1.木棒 167. 木棒 - AcWing题库 乔治拿来一组等长的木棒&#xff0c;将它们随机地砍断&#xff0c;使得每一节木棍的长度都不超过 5050 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态&#xff0c;但忘记了初始时有多少木棒以及木棒的初始长度。 请你设计一个程序…

MATLAB学习之旅:从入门到基础实践

在当今科技飞速发展的时代,MATLAB作为一款强大的数学软件,犹如一把神奇的钥匙,能够打开众多领域的大门。无论是工程计算、数据分析,还是算法开发、可视化呈现,MATLAB都展现出了无与伦比的魅力。今天,就让我们踏上这段奇妙的MATLAB学习之旅,从最基础的部分开始,逐步探索…

verilog笔记

Verilog学习笔记&#xff08;一&#xff09;入门和基础语法BY电棍233 由于某些不可抗拒的因素和各种的特殊原因&#xff0c;主要是因为我是微电子专业的&#xff0c;我需要去学习一门名为verilog的硬件解释语言&#xff0c;由于我是在某西部地区的神秘大学上学&#xff0c;这所…

基于SpringBoot的城乡商城协作系统【附源码】

基于SpringBoot的城乡商城协作系统 效果如下&#xff1a; 系统登陆页面 系统管理员主页面 商品信息管理页面 系统用户主页面 社区交流页面 用户充值页面 订单提交页面 商品信息页面 研究背景 随着互联网技术的飞速发展&#xff0c;电子商务在我国城乡地区的普及程度越来越高…

tortoiseSVN 如何克隆项目到本地

导入项目成功&#xff0c;如下图&#xff1a;

1.1 go环境搭建及基本使用

golang下载地址&#xff1a; Download and install - The Go Programming Language (google.cn) 验证安装是否成功&#xff1a; go version 查看go环境 go env 注意&#xff1a;Go1.11版本之后无需手动配置环境变量,使用go mod 管理项目&#xff0c;也不需要把项目放到GO…

使用Ubuntu搭建Java部署环境

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:小舟从此逝&#xff0c;江海寄余生&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小…

从零搭建微服务项目Pro(第1-1章——Quartz实现定时任务模块)

前言&#xff1a; 在企业项目中&#xff0c;往往有定时任务发布的需求&#xff0c;比如每天晚9点将今日数据备份一次&#xff0c;或每月一号将上月的销售数据邮件发送给对应的工作人员。显然这些操作不可能是人工到时间点调用一次接口&#xff0c;需要编写专门的模块完成任务的…

深蓝学院自主泊车第3次作业-IPM

目录 1 题目介绍2 求解 1 题目介绍 已知鱼眼相机的参数&#xff0c; image_width&#xff0c;表示图像的宽度image_height&#xff0c;表示图像的高度 ξ \xi ξ&#xff0c;表示鱼眼相机参数 k 1 k_1 k1​、 k 2 k_2 k2​&#xff0c;表示径向相机参数 p 1 p_1 p1​、 p 2 p…

中兴G7615AV5

参考文献&#xff1a; G7615AV5 光猫新版固件通过修改备份配置文件固化Telnet 中兴7615AV5光猫配置指南 前言&#xff1a;&#xff08;不如咸鱼30远程全权搞定&#xff0c;花小钱办大事&#xff09;截至2025年2月22号&#xff0c;这个设备开启Telnet只能去咸鱼找别人远程开&…

记录:Docker 安装记录

今天在安装 ollama 时发现无法指定安装目录&#xff0c;而且它的命令行反馈内容很像 docker &#xff0c;而且它下载的模型也是放在 C 盘&#xff0c;那么如果我 C 盘空间不足&#xff0c;就装不了 deepseek-r1:70b &#xff0c;于是想起来之前安装 Docker 的时候也遇到过类似问…

大数据学习之任务流调度系统Azkaban、Superset可视化系统

一.任务流调度系统Azkaban 1.课程介绍 2.为什么需要工作流调度系统 3.AZKABAN是什么 4.AZKABAN下载 5.制作安装包 6.tar包准备 7.MYSQL配置AZKABAN 8.配置EXECUTOR SERVER 9.配置WEBSERVER 10.单作业实战_yaml语言(今天稍晚更新) 11.单作业实战 12.多作业依赖实战 13.失败自动重…