当前位置: 首页 > news >正文

SpringBoot的自动配置功能-笔记

1.自动配置功能简介

Spring Boot 的自动配置功能是其核心特性之一,旨在简化 Spring 应用的配置。它通过条件化注解自动注册 Bean 的方式,根据项目的依赖和环境动态地启用或禁用特定功能,从而减少开发者的手动配置工作。

Spring Boot 自动配置的核心原理如下:

  1. @EnableAutoConfiguration 注解
    该注解用于启用自动配置它会扫描 spring.factories 文件中注册的自动配置类(在 spring-boot-autoconfigure 模块中)。

  2. 条件注解(Conditional Annotations)
    Spring Boot 通过以下注解判断是否满足条件来注册 Bean:

    • @ConditionalOnClass:当类路径中存在某个类时才生效。
    • @ConditionalOnMissingBean:当容器中不存在某个 Bean 时才创建。
    • @ConditionalOnProperty:当配置文件中某个属性为指定值时才生效。
  3. 自动配置类
    自动配置类通常是带有 @Configuration 注解的类,里面定义了多个 Bean,并结合条件注解实现按需配置。


2.使用示例

以一个邮件服务的自动配置为例,展示 Spring Boot 如何根据依赖自动注册邮件相关的 Bean。

2.1自动配置过程

step1.定义 MailService 接口

package com.example.autoconfigure;public interface MailService {void send(String to, String subject, String content);
}

step2.实现 MailService

package com.example.autoconfigure;public class MailServiceImpl implements MailService {@Overridepublic void send(String to, String subject, String content) {System.out.println("Sending email to: " + to);System.out.println("Subject: " + subject);System.out.println("Content: " + content);}
}

step3.定义自动配置类

package com.example.autoconfigure;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.mail.Session;@Configuration
@ConditionalOnClass(Session.class) // 仅当类路径中存在 Session 类时才生效
public class MailAutoConfiguration {@Bean@ConditionalOnMissingBean // 如果容器中没有定义 MailService,则自动创建public MailService mailService() {return new MailServiceImpl();}
}

step4. 在 spring.factories 中注册自动配置类

在 src/main/resources/META-INF/spring.factories 中添加:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfigure.MailAutoConfiguration

注意:

  • 在 spring.factories 中注册自动配置类,是为了让Spring Boot在启动时通过@EnableAutoConfiguration 触发自动配置。
  • 而开发者使用@Configuration定义的普通配置类无需该步骤,普通配置类是通过组件扫描(@ComponentScan)或 @Import 加载

2.2 使用自动配置

创建主类并测试自动配置:

  • 其中@SpringBootApplication是一个组合注解,包含@EnableAutoConfiguration,可用于启用 SpringBoot 的自动配置机制。
package com.example.demo;import com.example.autoconfigure.MailService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {ApplicationContext context = SpringApplication.run(DemoApplication.class, args);MailService mailService = context.getBean(MailService.class);mailService.send("user@example.com", "Hello", "Welcome to Spring Boot!");}
}

配置与排除自动配置

可以在 application.properties 中控制自动配置行为:

# 禁用某个自动配置类
spring.autoconfigure.exclude=com.example.autoconfigure.MailAutoConfiguration

或者通过 @SpringBootApplication 注解的 exclude 参数:

@SpringBootApplication(exclude = MailAutoConfiguration.class)
public class DemoApplication {...
}

3. 相关文档

Spring普通配置类 vs 自动配置类-笔记-CSDN博客

SpringBoot的自动扫描特性-笔记-CSDN博客

http://www.xdnf.cn/news/343549.html

相关文章:

  • 智能边缘计算系统:基于Python的创新应用
  • python3连接数据库工具类之Oracle
  • Day19 常见的特征筛选算法
  • 零拷贝的简单复习
  • Python变量作用域
  • C PRIMER PLUS——第6-2节:二维数组与多维数组
  • nginx 实现动静分离
  • 火影bug,未保证短时间数据一致性,拿这个例子讲一下Redis
  • Android Studio Gradle 中 只显示 Tasks 中没有 build 选项解决办法
  • 【Science Advances】北京邮电大学突破:基于MEMS-超表面的多阶涡旋光束高速切换技术
  • 缓冲区溢出分析
  • Java网络编程:深入剖析UDP数据报的奥秘与实践
  • WordPress插件depicter存在SQL注入漏洞(CVE-2025-2011)
  • Nginx 配置多个监听端口
  • 文件包含漏洞
  • 【JavaEE】TCP/IP协议(模型)
  • 使用ESPHome烧录固件到ESP32-C3并接入HomeAssistant
  • 森林生态学研究深度解析:R语言入门、生物多样性分析、机器学习建模与群落稳定性评估
  • WPF主窗体子窗体关联方法
  • WPF中解决数据绑定不匹配的问题
  • 中继器的作用
  • AI开发跃迁指南(第三章:第四维度2——weaviate cloud、weaviate docker安装配置及使用连接示例)
  • 【计算机网络】用户从输入网址到网页显示,期间发生了什么?
  • Nginx1.26.2安装包编译安装并配置stream模块
  • V型球阀材质性能深度解析:专攻颗粒、料浆与高腐蚀介质的工业利器-耀圣
  • WEB UI自动化测试之Pytest框架学习
  • RedHat磁盘的添加和扩容
  • 计数排序-详解
  • 从新手到高手:jQuery 全面进阶之路
  • 数字电子技术基础(五十六)——JK触发器