乐闻世界logo
搜索文章和话题

What is the auto-configuration principle of Spring Boot?

3月6日 21:58

Spring Boot Auto-Configuration Principle Explained

Core Concept

Spring Boot's auto-configuration is one of its most powerful features. It follows the convention over configuration principle, significantly simplifying Spring application development.

How Auto-Configuration Works

1. @SpringBootApplication Annotation

This is the entry point for auto-configuration, combining three key annotations:

java
@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan public @interface SpringBootApplication { }

@EnableAutoConfiguration is the key to enabling auto-configuration.

2. @EnableAutoConfiguration Mechanism

java
@AutoConfigurationPackage @Import(AutoConfigurationImportSelector.class) public @interface EnableAutoConfiguration { }

AutoConfigurationImportSelector is the core class implementing auto-configuration.

3. Core Auto-Configuration Process

Step 1: Read META-INF/spring.factories

Spring Boot scans all JARs for META-INF/spring.factories files during startup:

properties
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,\ org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration

Step 2: Conditional Filtering

Spring Boot uses conditional annotations to decide whether to load configurations:

AnnotationPurpose
@ConditionalOnClassActive when specified class exists
@ConditionalOnMissingClassActive when specified class doesn't exist
@ConditionalOnBeanActive when specified bean exists
@ConditionalOnMissingBeanActive when specified bean doesn't exist
@ConditionalOnPropertyActive when property condition is met

Step 3: Property Binding

java
@Configuration @ConditionalOnClass(DataSource.class) @EnableConfigurationProperties(DataSourceProperties.class) public class DataSourceAutoConfiguration { @Bean @ConditionalOnMissingBean public DataSource dataSource(DataSourceProperties properties) { return DataSourceBuilder.create() .url(properties.getUrl()) .build(); } }

Customizing Auto-Configuration

Exclude Specific Configurations

java
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class }) public class Application { }

Or in application.yml:

yaml
spring: autoconfigure: exclude: - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

Summary

Spring Boot auto-configuration core mechanisms:

  1. SPI Pattern: Discovers configurations via spring.factories
  2. Conditional Assembly: Uses @Conditional annotations for smart loading
  3. Property Binding: Externalized configuration via @ConfigurationProperties
  4. Convention over Configuration: Sensible defaults reduce explicit configuration
标签:Spring Boot