SpringBoot的自动配置功能-笔记
1.自动配置功能简介
Spring Boot 的自动配置功能是其核心特性之一,旨在简化 Spring 应用的配置。它通过条件化注解和自动注册 Bean 的方式,根据项目的依赖和环境动态地启用或禁用特定功能,从而减少开发者的手动配置工作。
Spring Boot 自动配置的核心原理如下:
-
@EnableAutoConfiguration
注解
该注解用于启用自动配置,它会扫描spring.factories
文件中注册的自动配置类(在spring-boot-autoconfigure
模块中)。 -
条件注解(Conditional Annotations)
Spring Boot 通过以下注解判断是否满足条件来注册 Bean:@ConditionalOnClass
:当类路径中存在某个类时才生效。@ConditionalOnMissingBean
:当容器中不存在某个 Bean 时才创建。@ConditionalOnProperty
:当配置文件中某个属性为指定值时才生效。
-
自动配置类
自动配置类通常是带有@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博客