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,一经查实,立即删除!

相关文章

使用 ChatGLM3 实现知识图谱的抽取与智能问答

使用 ChatGLM3 实现知识图谱的抽取与智能问答 1. 获取查询问题的最近似段落2. 对文本进行知识图谱的抽取3. 完成智能问答 1. 获取查询问题的最近似段落 代码如下, import jsonfrom langchain_openai import ChatOpenAIfile_name "./files/2022-03-31__中国工…

promise.all()静态方法说明和使用

promise.all()静态方法创建的期约会在一组期约全部解决后,再解决;意思就是参数内的期约全部解决完后,再解决自己的resolve()期约; 如果所有的期约都是解决状态,那么把所有值返回进一个数组; 如果参数期约中…

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

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

《妃梦千年》第二十章:风雨欲来

第二十章:风雨欲来 战斗的胜利让林清婉和皇上的关系更加亲密,但宫中的阴谋却并未因此而停止。一天,林清婉正在寝宫中思考未来的对策,忽然接到一个紧急消息。小翠匆匆跑来,神色紧张:“娘娘,太后…

代码随想录算法训练营第十五天| 513.找树左下角的值 | 112. 路径总和 | 106.从中序与后序遍历序列构造二叉树

513.找树左下角的值 文档讲解:代码随想录 视频讲解:怎么找二叉树的左下角? 递归中又带回溯了,怎么办?| LeetCode:513.找二叉树左下角的值_哔哩哔哩_bilibili 1. 层序遍历可以做,不知道用递归咋做…

获取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产品的更新,因为除了补丁程序外,确实没多少更新。 不过就在前两天,有一项产品得到了…

【开源的字典项目】【macOS】:在macOS上能打开mdd and mdx 的github开源项目

【开源的字典项目】【macOS】 在macOS上能打开mdd and mdx 的github开源项目 Here are some GitHub repositories that provide code for opening and reading mdd and mdx files in macOS: 1. MdxEdit: Repository: https://github.com/mdx-editorDescription: A free and …

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

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

【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…

【热门开源项目】阿里开源巨擘:Qwen-2 72B深度解析与推荐

在人工智能的浪潮中,开源模型如同璀璨的星辰,指引着开发者们探索未知的领域。而今天,我们将聚焦在阿里云推出的开源模型Qwen-2 72B上,从其项目介绍、技术特点、代码解析等多个角度,深入解析并推荐这一卓越的开源项目。…

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

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

自闭症儿童能不能用药

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