Spring applications need many infrastructure beans: DataSource, EntityManagerFactory, TransactionManager, DispatcherServlet, ViewResolver, MessageConverter. Manually configuring all of them is repetitive, error-prone, and project-specific — the same patterns repeat across every Spring project.
Auto-configuration is Spring Boot’s mechanism for automatically creating and configuring beans based on dependencies on the classpath. It uses @Conditional annotations to apply configuration only when specific classes, beans, or properties are present. Starters are curated dependency descriptors that trigger auto-configuration for a specific technology.
- @EnableAutoConfiguration: Triggers scanning of
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports - Conditional evaluation: Each auto-configuration class has
@ConditionalOnClass,@ConditionalOnMissingBean,@ConditionalOnPropertyconditions - Example: If
DataSourceclass is on classpath AND noDataSourcebean is defined, Boot auto-creates one fromapplication.properties - @ConditionalOnClass: Configuration applies only if specific classes exist on classpath (e.g.,
HSQL Driver) - @ConditionalOnMissingBean: Don’t override user-defined beans — user’s
@Beantakes priority - @ConditionalOnProperty: Enable/disable configuration via properties (e.g.,
spring.jpa.hibernate.ddl-auto) - Override mechanism: User defines a
@Beanof the same type → auto-configuration backs off
- Conditional annotations:
@ConditionalOnClass,@ConditionalOnMissingBean,@ConditionalOnProperty,@ConditionalOnResource, etc. - Starter dependencies:
spring-boot-starter-web,spring-boot-starter-data-jpa,spring-boot-starter-security— each pulls the transitive deps needed - Auto-configuration report: Enable
--debugto see which auto-configurations applied and which were skipped - Custom starter: Create
spring-boot-starter-*with auto-configuration module + starter POM - Property binding:
@ConfigurationPropertiesbinds properties to structured Java objects
- Built from: Spring Boot — Auto-configuration is the core feature of Spring Boot
- Related: Spring Boot Actuator — Actuator’s auto-configuration adds health, metrics endpoints
- Related: Spring Boot REST API — Web auto-configuration sets up embedded Tomcat + Jackson + MVC
- Contrasts with: EJB Deployment Descriptor — EJB uses declarative XML; Spring Boot uses classpath-based conditions
- Builds into: Spring Data JPA — Spring Boot auto-configures DataSource and JPA repos
- Hidden configuration: Auto-configuration can create beans you didn’t expect — use
spring-boot:run --debugto see the report - Override confusion: Simply adding your own
@Beanof the same type disables auto-configuration — sometimes intentionally - Starter conflicts: Conflicting starters (e.g., two embedded DBs on classpath) can cause startup failures
- Exclusion: Exclude auto-configuration classes with
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) - Performance: Auto-configuration evaluation happens at startup — hundreds of conditional checks can slow cold starts