springboot-自动配置

ops/2024/10/18 19:48:50/

一、自动配置的原理
Spring Boot 的自动配置基于以下几个核心概念:

条件注解 (Conditional Annotations):@Conditional 系列注解用于根据特定条件判断是否加载某个配置类或 Bean。
自动配置类 (Auto-configuration Classes):这些类通过 META-INF/spring.factories 文件被自动加载。
配置属性 (Configuration Properties):通过外部化配置来控制自动配置的行为。

二、自动配置的实现机制
Spring Boot 通过以下步骤实现自动配置:

启用自动配置:在主类上添加 @SpringBootApplication 注解,该注解包含 @EnableAutoConfiguration,开启自动配置功能。
加载自动配置类:Spring Boot 在启动时会扫描 META-INF/spring.factories 文件,找到所有自动配置类。
条件注解的评估:根据条件注解(如 @ConditionalOnClass、@ConditionalOnMissingBean 等),决定是否加载对应的配置类或 Bean。

三、自动配置示例
接下来,我们通过具体的代码示例来展示 Spring Boot 自动配置的工作原理。

1. 创建 Spring Boot 项目
首先,创建一个简单的 Spring Boot 项目。在 pom.xml 文件中添加必要的依赖:

java"><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>
</dependencies>

2. 主类和基本配置
创建一个主类,并添加 @SpringBootApplication 注解:

java">import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}

3. 自动配置类示例
为了展示自动配置的原理,我们自定义一个自动配置类。假设我们要自动配置一个自定义服务 MyService。

首先,创建 MyService 类:

java">public class MyService {public void perform() {System.out.println("Performing a task...");}
}

然后,创建自动配置类 MyServiceAutoConfiguration:

java">import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;@Configuration
public class MyServiceAutoConfiguration {@Bean@ConditionalOnMissingBeanpublic MyService myService() {return new MyService();}
}

在 resources/META-INF/spring.factories 文件中注册自动配置类:

java">org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.demo.MyServiceAutoConfiguration

4. 使用自定义自动配置
在 Spring Boot 应用中,我们可以直接注入 MyService 并使用它:

java">import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@Autowiredprivate MyService myService;@GetMapping("/perform")public String performTask() {myService.perform();return "Task performed!";}
}

启动应用程序,访问 http://localhost:8080/perform,可以看到控制台输出 “Performing a task…”。

四、自动配置的深入理解
1. 条件注解
Spring Boot 提供了丰富的条件注解,用于控制配置类或 Bean 的加载:

@ConditionalOnClass:当类路径上存在指定的类时,才会实例化相应的 Bean。
@ConditionalOnMissingBean:当容器中不存在指定的 Bean 时,才会实例化相应的 Bean。
@ConditionalOnProperty:当指定的配置属性存在并符合预期时,才会实例化相应的 Bean。
2. 配置属性
通过外部化配置(如 application.properties 或 application.yml),可以控制自动配置的行为:

java">my.service.enabled=true

在自动配置类中,可以使用 @ConditionalOnProperty 注解来实现基于配置属性的条件加载:

java">@Configuration
@ConditionalOnProperty(name = "my.service.enabled", havingValue = "true", matchIfMissing = true)
public class MyServiceAutoConfiguration {// ...
}

五、禁用自动配置
在某些情况下,你可能需要禁用特定的自动配置。可以使用 @SpringBootApplication 注解的 exclude 属性:

java">@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class DemoApplication {// ...
}

http://www.ppmy.cn/ops/48663.html

相关文章

【计算机网络】个人学习笔记——第六章 应用层:域名系统DNSWWW万维网FTPHTTPSMTPPOP3DHCP

文章目录 第六章 应用层一、应用层概述1.应用层的功能2.应用层的重要协议3.应用层的常见模型 二、域名系统DNS【重点】1.DNS域名解析系统概述2.域名结构3.域名类型4.域名服务器5.域名解析方式6.域名查询过程的理解 三、文件传输协议【重点】1.文本传送协议FTP2.简单文件传送协议…

背景渐变动画登录页

b站视频演示效果: 效果图: 完整代码: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>背景…

list容器的基本使用

目录 前言一&#xff0c;list的介绍二&#xff0c;list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插&#xff0c;头删&#xff0c;尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear 前言 list中的接口比较多&#xff0c;与string和vector类似&am…

如何在 Windows 10/11 上编辑 PDF [4 种简单方法]

PDF 在大多数设备上都易于查看&#xff0c;但由于其设计用于查看&#xff0c;因此编辑起来可能比较棘手。编辑 PDF 可能比编辑 Microsoft Office 文档更具挑战性。 不用担心&#xff0c;我们已经为你做好了准备。无论你是想添加、删除还是插入文本或图片&#xff0c;你都可以使…

Python酷库之旅-比翼双飞情侣库(08)

目录 一、xlrd库的由来 二、xlrd库优缺点 1、优点 1-1、支持多种Excel文件格式 1-2、高效性 1-3、开源性 1-4、简单易用 1-5、良好的兼容性 2、缺点 2-1、对.xlsx格式支持有限 2-2、功能相对单一 2-3、更新和维护频率低 2-4、依赖外部资源 三、xlrd库的版本说明 …

《站在2024年的十字路口:计算机专业是否仍是高考生的明智之选?》

文章目录 每日一句正能量前言行业竞争现状行业饱和度和竞争激烈程度[^3^]新兴技术的影响[^3^]人才需求的变化[^3^]行业创新动态如何保持竞争力 专业与个人的匹配度判断专业所需的技术能力专业核心课程对学生的要求个人兴趣和性格特点专业对口的职业发展要求实践和经验个人价值观…

idea中maven下载依赖缓慢解决方法

解决IDEA中Maven下载依赖包过慢或报错的问题_maven 下载依赖要很久-CSDN博客

如何提高MySQL DELETE 速度

提高MySQL中DELETE操作的速度通常涉及多个方面&#xff0c;包括优化查询、索引、表结构、硬件和配置等。以下是一些建议&#xff0c;以及一些示例代码&#xff0c;用于帮助我们提高DELETE操作的速度。 1.提高MySQL DELETE 速度的方法 1.1 优化查询 只删除必要的行&#xff1a…