Spring Boot 自动配置:化繁为简的魔法

在 Java 世界里,Spring 框架以其强大的功能和灵活的设计著称,但繁琐的配置也常常让开发者望而却步。Spring Boot 应运而生,它采用"约定大于配置"的理念,通过自动配置机制,极大地简化了 Spring 应用的开发和部署。

自动配置的奥秘:Spring Boot 的魔法棒

想象一下,你是一位魔术师,想要表演一个精彩的魔术。你不需要每次都从头开始准备道具,而是使用预先配置好的魔法箱。Spring Boot 的自动配置就像这个魔法箱,它预先配置了各种常用的 Spring 功能,开发者只需引入相应的依赖,即可轻松使用。

1. Starter 依赖:开启魔法之门

Spring Boot Starter 是一组便捷的依赖描述符,它们将常用的 Spring 组件打包在一起,例如 spring-boot-starter-web 包含了 Spring MVC、Tomcat 等 Web 开发所需的依赖。此外,还有其他常用的 Starter 依赖:

  • spring-boot-starter-data-jpa:用于 JPA 数据访问。

  • spring-boot-starter-security:用于安全性相关配置。

  • spring-boot-starter-test:用于测试。

当你引入一个 Starter 依赖时,Spring Boot 会自动加载该 Starter 依赖及其传递依赖,并将这些依赖添加到你的应用的类路径中。

2. 条件化配置:按需加载,灵活掌控

Spring Boot 的自动配置是基于条件化的,这意味着只有当满足特定条件时,才会加载相应的配置。例如,只有当你的类路径中存在 spring-webmvc 依赖时,Spring Boot 才会自动配置 Spring MVC。

Spring Boot 使用 @Conditional 注解及其派生注解来实现条件化配置。这些注解可以根据多种条件来决定是否加载配置,例如:

  • @ConditionalOnClass:当类路径中存在指定的类时,才会加载配置。

  • @ConditionalOnMissingBean:当 Spring 容器中不存在指定类型的 Bean 时,才会加载配置。

  • @ConditionalOnProperty:当指定的配置属性存在且值为指定值时,才会加载配置。

例如,以下是一个基于属性的条件配置例子:

@Configuration
@ConditionalOnProperty(name = "myapp.feature.enabled", havingValue = "true")
public class MyFeatureConfig {@Beanpublic MyFeatureBean myFeatureBean() {// 创建和配置 MyFeatureBeanreturn new MyFeatureBean();}
}

3. 自动配置类:魔法的源泉

Spring Boot 的自动配置类是定义自动配置规则的地方。这些类通常位于 spring-boot-autoconfigure jar 包中,并使用 @Configuration 注解进行标记。

自动配置类中包含了各种 @Bean 定义,用于创建和配置 Spring Bean。这些 Bean 的创建和配置都依赖于条件化配置,只有当满足特定条件时,才会创建和配置这些 Bean。

一些常见的自动配置类包括:

  • DataSourceAutoConfiguration:数据源配置。

  • SecurityAutoConfiguration:安全配置。

  • WebMvcAutoConfiguration:Spring MVC 配置。

4. 自定义配置:掌控全局,随心所欲

尽管 Spring Boot 提供了丰富的自动配置,但开发者仍然可以自定义配置,覆盖自动配置的行为。

Spring Boot 提供了多种自定义配置的方式,例如:

  • 使用 application.properties 或 application.yml 文件配置属性,例如:

    server.port=8081
    myapp.feature.enabled=true

2. 自动配置 Spring MVC

spring-boot-starter-web 依赖会自动加载 spring-boot-autoconfigure jar 包中的 WebMvcAutoConfiguration 类。该类使用 @ConditionalOnClass 注解,只有当类路径中存在 DispatcherServlet.class 时,才会加载配置。

WebMvcAutoConfiguration 类中包含了大量的 @Bean 定义,用于创建和配置 Spring MVC 相关的 Bean,例如:

  • DispatcherServlet:Spring MVC 的核心 Servlet。

  • ViewResolver:视图解析器,用于解析视图名称。

  • HandlerMapping:处理器映射器,用于将请求映射到相应的处理器。

3. 自定义配置

你可以通过创建自定义的 @Configuration 类,并使用 @Bean 定义覆盖自动配置的 Bean,例如:

@Configuration
public class MyWebConfig {@Beanpublic ViewResolver customViewResolver() {// 自定义视图解析器return new MyViewResolver();}
}

另外,你可以在 application.properties 文件中加入自定义配置:

spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

这样,你就可以自定义视图的前缀和后缀。

结语

Spring Boot 的自动配置机制是其核心特性之一,它通过 Starter 依赖、条件化配置、自动配置类和自定义配置,极大地简化了 Spring 应用的开发和部署。理解和利用 Spring Boot 的自动配置机制,可以让我们写出更加优雅、高效的代码!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/864329.shtml

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

相关文章

【深度学习】调整加/减模型用于体育运动评估

摘要 一种基于因果关系的创新模型,名为调整加/减模型,用于精准量化个人在团队运动中的贡献。该模型基于明确的因果逻辑,将个体运动员的价值定义为:在假设情景下,用一名价值为零的球员替换该球员后,预期比赛…

获取onnx模型输入输出结构信息的3种方式:ONNX、onnxruntime、netron

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

每日Attention学习7——Frequency-Perception Module

模块出处 [link] [code] [ACM MM 23] Frequency Perception Network for Camouflaged Object Detection 模块名称 Frequency-Perception Module (FPM) 模块作用 获取频域信息,更好识别伪装对象 模块结构 模块代码 import torch import torch.nn as nn import to…

【Python函数编程实战】:从基础到进阶,打造代码复用利器

文章目录 🚋前言🚀一、认识函数🌈二、函数定义❤️三、函数调用⭐四、实参与形参💥1. 形式参数🚲2. 实际参数🔥1. 位置参数☔2. 关键字参数🎬3. 默认参数🔥4. 可变数量参数(不定长参…

Nomad Web 1.0.12还能这样

大家好,才是真的好。 前几天讲代码和开发,忽略了大家的真实感受,那就是不爱开。我也记起来我们很久没有讲Notes/Domino产品的更新,因为除了补丁程序外,确实没多少更新。 不过就在前两天,有一项产品得到了…

零成本、高效率:免费可视化工具的魅力所在

在如今这个数据驱动的时代,免费可视化工具越来越受到人们的欢迎。这些工具不仅降低了数据分析的门槛,还为用户提供了强大的功能和极高的灵活性,使得各行各业的人们都能够轻松地利用数据做出明智的决策。首先,免费可视化工具的零成…

【Qt】认识Qt界面Hello world小程序

一.认识Qt界面 1.左边栏 在编辑模式下,左边竖排的两个窗⼝叫做 "边栏" 。 ① 是项⽬⽂件管理窗⼝ ② 是打开⽂件列表窗⼝。 边栏⾥的窗⼝数⽬可以增加,边栏⼦窗⼝标题栏有⼀排⼩按钮,最右边的是关闭按钮,倒数第⼆个是 …

嵌入式学习——硬件(IIC、ADC)——day56

1. IIC 1.1 定义(同步串行半双工通信总线) IIC(Inter-Integrated Circuit)又称I2C,是是IICBus简称,所以中文应该叫集成电路总线。是飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备…

猫头虎 Gemma和Gemini模型的区别是什么?

猫头虎 🐯 Gemma和Gemini模型的区别是什么? 摘要📘 在这篇文章中,我们将深入探讨Gemma和Gemini这两个由Google开发的AI模型。我们会对比它们的参数规模、计算资源需求和集成难度,帮助大家了解这两者之间的主要区别。…

【解锁未来:深入了解机器学习的核心技术与实际应用】

解锁未来:深入了解机器学习的核心技术与实际应用 💎1.引言💎1.1 什么是机器学习? 💎2 机器学习的分类💎3 常用的机器学习算法💎3.1 线性回归(Linear Regression)&#x1…

Redis集群-主从复制、哨兵

●主从复制:主从复制是高可用Redis的基础,哨兵和集群都是在主从复制基础上实现高可用的。 主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复。缺陷:故障 恢复无法自动化;写操作无法负载均…

幻兽帕鲁服务器如何安装模组安装

由于模组多数为Window版本的,所以本教程以服务端为Window的作为演示(Linux服务端的也是一样的操作)百度莱卡云开服 如果你你是Linux版本的,请点击跳转切换服务端教程 接下来是本地安装模组包的方法(服务器自带&#xf…

妙笔 WonderPen 专业版会员值得购买吗?

在信息爆炸的时代,写作已经是一项重要技能。无论是学生、职场人士还是自由职业者,都经常需要写点东西。 一个好的工具能让写作成为享受,今天就为大家推荐专业写作工具:妙笔。为长文写作设计,且有云服务功能&#xff0…

自闭症儿童能不能用药

在星贝育园自闭症儿童康复学校,我们一直秉持着谨慎且保守的态度对待自闭症儿童的用药问题。我们坚定地认为,在大多数情况下,药物并非自闭症儿童康复的首选。 自闭症是一种神经发育障碍,其核心症状包括社交沟通障碍、重复刻…

为什么网络爬虫广泛使用HTTP代理?

一、引言 网络爬虫作为自动抓取互联网信息的重要工具,在现代社会中发挥着不可或缺的作用。然而随着网络环境的日益复杂,网站反爬虫技术的不断进步,网络爬虫在获取数据的过程中面临着越来越多的挑战。为了应对这些挑战,HTTP 代理成…

C++专业面试真题(1)学习

进程有多少种状态,如何转换 创建:一个进程启动,首先进入创建状态,需要获取系统资源创建进程管理科PCB完成资源分配。就绪态:在创建完成后,进程已经准备好,处于就绪状态,但是还未获得…

Linux内核——Linux内核体系模式(二)

1 Linux系统的中断机制 Linux内核将中断分为两类:硬件中断和软件中断(异常)。每个中断是由0-255之间的一个数字进行标识。 中断int0-int31(0x00-0x1f)作为异常int32-int255由用户自己设定 int32-int47对应与8259A中断…

PCL 基于点云RGB颜色的区域生长算法

RGB颜色的区域生长算法 一、概述1.1 算法定义1.2 算法特点1.3 算法实现二、代码示例三、运行结果🙋 结果预览 一、概述 1.1 算法定义 点云RGB区域生长算法: 是一个基于RGB颜色信息的区域生长算法,用于点云分割。该算法利用了点云中相邻点之间的颜色相似性来将点云分割成…

志愿者管理系统带讲解,保运行

技术栈 后端: SpringBoot Mysql MybatisPlus 前端: Vue Element 分为 管理员端 用户端 功能描述 用户端 管理员端 观看地址: B站 : 【毕设者】志愿者管理系统(安装讲解源码)

进程,线程,虚拟内存,交换技术

参考资料: 参考视频1https://www.bilibili.com/video/BV1Hs421M78w/?spm_id_from333.999.0.0&vd_source97411b9a8288d7869f5363f72b0d7613 参考视频2https://www.bilibili.com/video/BV1jE411W7e8/?spm_id_from333.337.search-card.all.click&vd_source…