Spring Boot 自动配置核心注解

一、自动配置的作用

一句话:

在 Spring 启动时,根据"是否存在某些类 / Bean / 配置",自动创建并管理一些 Bean。

二、自动配置六大核心注解

1. @Configuration

作用:

标记一个类为配置类,等同于 XML 配置文件

代码:

java 复制代码
@Configuration
public class MailAutoConfiguration {

    @Bean
    public MailService mailService() {
        return new MailService();
    }
}
属性 说明
proxyBeanMethods = true 方法调用走代理(保证单例)
proxyBeanMethods = false 直接调用(推荐,自动配置常用)

2. @ConditionalOnClass

作用:

classpath 中存在指定类,配置才生效

代码:

java 复制代码
@Configuration
@ConditionalOnClass(DataSource.class)
public class JdbcAutoConfiguration {
}

使用场景:

  • starter 是否存在

  • 第三方库是否被引入

3. @EnableConfigurationProperties

作用:

把一个 @ConfigurationProperties类注册为 Bean

最小代码:

java 复制代码
@Configuration
@EnableConfigurationProperties(MailProperties.class)
public class MailAutoConfiguration {
}

没有它的后果:

  • @ConfigurationProperties能读配置

  • 但不能被注入

4. @ConfigurationProperties

作用:

把 application.yml中的配置绑定到 Java Bean

最小代码:

java 复制代码
@ConfigurationProperties(prefix = "mail")
public class MailProperties {

    private String host;
    private int port;

    // getter / setter 必须
}

yml 示例:

java 复制代码
mail:
  host: smtp.qq.com
  port: 587

5. @ConditionalOnMissingBean

作用:

当容器中不存在该类型 Bean 时才创建

最小代码:

java 复制代码
@Bean
@ConditionalOnMissingBean
public MailService mailService() {
    return new MailService();
}

使用场景

  • 允许用户自定义 Bean

  • 自动配置退让


6.@Import

作用

导入其他配置类

最小代码:

java 复制代码
@Configuration
@Import({AConfig.class, BConfig.class})
public class RootAutoConfiguration {
}

使用场景:

  • 拆分复杂自动配置

  • 模块化 starter


三、把它们串成一个完整自动配置(重点)

application.yml

复制代码
mail:
  host: smtp.qq.com
  port: 587

Properties

java 复制代码
@ConfigurationProperties(prefix = "mail")
public class MailProperties {
    private String host;
    private int port;
}

自动配置类

java 复制代码
@Configuration
@EnableConfigurationProperties(MailProperties.class)
@ConditionalOnClass(MailService.class)
public class MailAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public MailService mailService(MailProperties properties) {
        return new MailService(properties);
    }
}

注册自动配置

复制代码
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

com.example.MailAutoConfiguration

四、总结

**Spring Boot 自动配置 =

@Configuration +

@ConditionalOnClass +

@EnableConfigurationProperties +

@ConfigurationProperties +

@ConditionalOnMissingBean**

相关推荐
海的透彻3 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat3 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
后台模板学习3 小时前
大模型 Prompt 工程在电商订单系统中的踩坑记录
java·python·prompt
w_zero_one3 小时前
算法--构造
java·数据结构·算法
SL_staff4 小时前
制造业订单交付崩盘?用四层协同框架重建交付可信度(技术实践)
java·产品·全栈
SL_staff5 小时前
打破风控迭代死循环:用决策编排重构业务与技术协作链路
java·产品·全栈
Mikko75 小时前
Redis 连接数满了服务端有错误信息吗?连接数不增加却命令超时?6.2 实测连接池、超时与大 key 怎么判定
java·spring boot·redis·后端
.Bryce.5 小时前
从零到一开发技术名词大全:从需求分析到 AI Agent 工程
java·网络·人工智能·agent·需求分析·agent评测
SL_staff5 小时前
JVS-APS的7个刚性约束设计:从无限产能幻觉到可执行排产的工程实践
java·spring cloud·全栈
代码山河7 小时前
基本类型转换:自动类型转换与强制类型转换
java·学习·架构·教程·面向对象·项目