pringboot自动装配原理是?

Spring Boot 自动装配(Auto-Configuration)是 Spring Boot 的一项核心功能,旨在帮助开发者快速构建应用程序,减少手动配置的工作量。它通过智能的方式根据项目的依赖和配置自动推断出合适的配置,并将其自动应用到应用程序中。

Spring Boot 自动装配的原理主要基于以下几个核心概念:

  1. @EnableAutoConfiguration 注解
    Spring Boot 自动装配的核心注解是 @EnableAutoConfiguration,它通常通过 @SpringBootApplication 注解间接启用。@SpringBootApplication 是一个组合注解,包含了 @EnableAutoConfiguration、@ComponentScan 和 @Configuration。
@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

@EnableAutoConfiguration 让 Spring Boot 开启自动装配机制,它会根据项目的类路径、环境变量和配置文件等信息,判断自动装配哪些组件。
@Configuration 表示该类是一个配置类,Spring 会在这个类中创建一些 Bean。
@ComponentScan 会让 Spring 扫描当前包及其子包中的所有组件。
2. @AutoConfiguration 类
Spring Boot 会根据当前项目的依赖(例如是否包含某个库或模块)来自动配置相应的 Bean。这些配置类都标注了 @Configuration 和 @AutoConfiguration 注解。

自动装配的配置类通常是 Spring Boot 提供的,如:

DataSourceAutoConfiguration:如果项目中包含 H2、MySQL、PostgreSQL 等数据库驱动,Spring Boot 会自动配置数据源。
HibernateJpaAutoConfiguration:如果项目中使用了 JPA 相关的库,会自动配置 EntityManagerFactory 等 JPA 相关的组件。
这些自动配置类通常存在于 Spring Boot 的 spring-boot-autoconfigure 模块中。

  1. META-INF/spring.factories 文件
    自动装配的配置类会在 spring.factories 文件中进行注册。spring.factories 文件位于 META-INF/ 目录下,包含了自动配置类的配置信息。例如:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

每个自动配置类都会在该文件中声明,使 Spring Boot 能根据类路径下的依赖动态加载相关的自动配置。

  1. 条件化自动装配(@Conditional 注解)
    Spring Boot 的自动装配是条件化的,意味着它不会无条件地加载所有自动配置类,而是通过一系列条件判断,决定是否执行自动配置。

@Conditional 注解(以及其子注解,如 @ConditionalOnClass、@ConditionalOnMissingBean 等)用于描述这些条件。例如:

@ConditionalOnClass: 如果类路径中包含指定的类,则激活自动装配。
@ConditionalOnMissingBean: 如果容器中没有某个指定的 Bean,则激活自动装配。
@ConditionalOnProperty: 如果配置文件中有特定的属性,则激活自动装配。
这使得 Spring Boot 的自动装配非常灵活和可定制。

例如,DataSourceAutoConfiguration 类可能只有在项目中包含了 H2、MySQL 或其他相关数据库驱动时,才会进行自动配置。否则,它将不会生效。

  1. @ConfigurationProperties 配置类
    Spring Boot 还通过 @ConfigurationProperties 注解来绑定外部配置文件中的属性(如 application.properties 或 application.yml)到 Java 类中。这些属性可以是自动配置的一部分,Spring Boot 会自动扫描这些类并根据配置文件加载相应的 Bean。
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProperties {private String url;private String username;private String password;}
  1. 手动禁用自动装配
    如果某个自动装配类不符合需求或你希望禁用某个特定的自动装配,可以使用 @EnableAutoConfiguration(exclude = …) 或 @SpringBootApplication(exclude = …) 来排除不需要的自动装配。

例如:

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

总结

Spring Boot 自动装配通过条件化的配置类和智能化的规则,使得开发者在使用 Spring Boot
时不需要手动配置很多组件。它依赖于类路径、配置文件和环境信息,根据这些条件判断并加载适合的配置类。通过
@EnableAutoConfiguration、@Conditional 注解以及 spring.factories
文件的配合,Spring Boot 实现了灵活且高效的自动配置功能。

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

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

相关文章

Ubuntu,openEuler,MySql安装

文章目录 Ubuntu什么是Ubuntu概述Ubuntu版本简介桌面版服务器版 部署系统新建虚拟机安装系统部署后的设置设置root密码关闭防火墙启用允许root进行ssh安装所需软件制作快照 网络配置Netplan概述配置详解配置文件DHCP静态IP设置 软件安装方法apt安装软件作用常用命令配置apt源 d…

大数据实验4-HBase

一、实验目的 阐述HBase在Hadoop体系结构中的角色;能够掌握HBase的安装和配置方法熟练使用HBase操作常用的Shell命令; 二、实验要求 学习HBase的安装步骤,并掌握HBase的基本操作命令的使用; 三、实验平台 操作系统&#xff1…

docker pull命令拉取镜像失败的解决方案

docker pull命令拉取镜像失败的解决方案 简介: docker pull命令拉取镜像失败的解决方案 docker pull命令拉取镜像失败的解决方案 一、执行docker pull命令,拉取镜像失败 报错信息:error pulling image configuration: Get https://produc…

qt+opengl 三维物体加入摄像机

1 在前几期的文章中,我们已经实现了三维正方体的显示了,那我们来实现让物体的由远及近,和由近及远。这里我们需要了解一个概念摄像机。 1.1 摄像机定义:在世界空间中位置、观察方向、指向右侧向量、指向上方的向量。如下图所示: …

安宝特方案 | AR助力紧急救援,科技守卫生命每一刻!

在生死时速的紧急救援战场上,每一秒都至关重要!随着科技的发展,增强现实(AR)技术正在逐步渗透到医疗健康领域,改变着传统的医疗服务模式。 安宝特AR远程协助解决方案,凭借其先进的技术支持和创新…

生成对抗网络模拟缺失数据,辅助PAMAP2数据集仿真实验

PAMAP2数据集是一个包含丰富身体活动信息的数据集,它为我们提供了一个理想的平台来开发和测试HAR模型。本文将从数据集的基本介绍开始,逐步引导大家通过数据分割、预处理、模型训练,到最终的性能评估,在接下来的章节中&#xff0c…

使用ChatGPT生成和优化电子商务用户需求规格说明书

在电子商务项目开发中,用户需求规格说明书(User Requirement Specification, URS)是团队沟通与项目成功的基石。然而,面对复杂多变的需求,如何快速生成清晰、完整且具备说服力的文档?这正是AI工具的用武之地…

12-表的约束

知识背景 表的约束,就是在表中的数据上加上约束,也被称为数据完整性约束。数据完整性约束的目的是为了不被规定的、不符合规范的数据进入数据库 在录入数据库或数据发生变化时,DBMS(数据库管理系统)会按照一定的约束条件对数据进行监测&…

美创科技入选2024数字政府解决方案提供商TOP100!

11月19日,国内专业咨询机构DBC德本咨询发布“2024数字政府解决方案提供商TOP100”榜单。美创科技凭借在政府数据安全领域多年的项目经验、技术优势与创新能力,入选收录。 作为专业数据安全产品与服务提供商,美创科技一直致力于为政府、金融、…

微信小程序与公众号关联(同一主体),获取unionId并关联公众号openid

背景 有一些同学在实际开发中,会有通过微信的openid获取公众号的openid,或者其他内容,这几天正好在研究这个功能的实现(已实现),现做思路上的简单分享,希望能对需要解决该问题的同学有所帮助&a…

SplatFormer: Point Transformer for Robust3D Gaussian Splatting 论文解读

目录 一、概述 二、相关工作 1、NVI新视角插值 2、稀疏视角重建 3、OOD-NVS 4、无约束重建下的正则化技术 5、基于学习的2D-to-3D模型 6、3D点云处理技术 三、SplatFormer 1、Point Transformer V3 2、特征解码器 3、损失函数 四、数据集 五、实验 一、概述 该论…

c++视频图像处理

打开视频或摄像头 打开指定视频 /*VideoCapture(const String &filename, apiPreference);filename:读取的视频或者图像序列的名称apiPreference:读取数据时设置的属性*/ VideoCapture video; //定义一个空的视频对象 video.open("H:/BaiduNetdiskDownlo…

前端三剑客(二):CSS

目录 1. CSS 基础 1.1 什么是 CSS 1.2 语法格式 1.3 引入方式 1.3.1 行内样式 1.3.2 内部样式 1.3.3 外部样式 1.4 CSS 编码规范 2. 选择器 2.1 标签选择器 2.2 id 选择器 2.3 class 选择器(类选择器) 2.4 复合选择器 2.5 通配符选择器 3. 常用 CSS 样式 3.1 c…

udp_socket

文章目录 UDP服务器封装系统调用socketbind系统调用bzero结构体清0sin_family端口号ip地址inet_addrrecvfromsendto 新指令 netstat -naup (-nlup)包装器 的两种类型重命名方式包装器使用统一可调用类型 关键字 typedef 类型重命名系统调用popen关于inet_ntoa UDP服务器封装 系…

【LLM训练系列02】如何找到一个大模型Lora的target_modules

方法1:观察attention中的线性层 import numpy as np import pandas as pd from peft import PeftModel import torch import torch.nn.functional as F from torch import Tensor from transformers import AutoTokenizer, AutoModel, BitsAndBytesConfig from typ…

解!决!vscode!Path Intellisense 失效!不起作用问题!!

第一步:找到path Intellisense插件 点击设置 第二步:打开settings.json文件: 第三步:配置settings.json文件内容: "path-intellisense.mappings": {"": "${workspaceRoot}/src",&qu…

力扣 LeetCode 110. 平衡二叉树(Day8:二叉树)

解题思路: 等于 -1 时,直接 return -1 class Solution {public boolean isBalanced(TreeNode root) {return getHeight(root) ! -1;}public int getHeight(TreeNode root) {if (root null) return 0;int leftDepth getHeight(root.left);if (leftDep…

ros2学习日记_241124_ros相关链接

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…

【TEST】Apache JMeter + Influxdb + Grafana

介绍 使用Jmeter发起测试,测试结果存入Influxdb,Grafana展示你的测试结果。 环境 windows 10docker desktopJDK17 安装 Apache JMeter 访问官网(Apache JMeter - Apache JMeter™)下载JMeter(目前最新版本5.6.3&a…

【隐私计算大模型】联邦深度学习之拆分学习Split learning原理及安全风险、应对措施以及在大模型联合训练中的应用案例

Tips:在两方场景下,设计的安全算法,如果存在信息不对等性,那么信息获得更多的一方可以有概率对另一方实施安全性攻击。 1. 拆分学习原理 本文介绍了一种适用于隐私计算场景的深度学习实现方案——拆分学习,又称分割…