Automatic configuration capabilities for Spring applications based on classpath contents and environment properties
npx @tessl/cli install tessl/maven-org-springframework-boot--spring-boot-autoconfigure@3.5.0Spring Boot AutoConfigure provides automatic configuration capabilities for Spring applications through conditional bean registration and configuration based on classpath contents, environment properties, and other conditions. It includes auto-configurations for over 50 different technologies and frameworks, enabling "convention over configuration" development with intelligent defaults and extensive customization options.
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>3.5.3</version>
</dependency>Gradle:
implementation 'org.springframework.boot:spring-boot-autoconfigure:3.5.3'import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.condition.*;
import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
// Primary way to enable auto-configuration
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
// Alternative: explicit auto-configuration enabling
@Configuration
@EnableAutoConfiguration
@ComponentScan
public class MyConfiguration {
// Configuration beans
}Spring Boot AutoConfigure is built around several key architectural patterns:
@ConditionalOn* annotations to determine when configurations should be applied*AutoConfiguration, these classes define beans and configurations for specific technologies*Properties classes provide type-safe external configuration binding*Customizer interfaces allow fine-grained modification of auto-configurations@AutoConfigureBefore and @AutoConfigureAfter manage configuration dependenciesPrimary annotations and classes that form the foundation of Spring Boot's auto-configuration system.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public @interface SpringBootApplication {
Class<?>[] exclude() default {};
String[] excludeName() default {};
String[] scanBasePackages() default {};
Class<?>[] scanBasePackageClasses() default {};
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class<?>[] exclude() default {};
String[] excludeName() default {};
}Comprehensive set of conditional annotations that determine when auto-configurations should be applied based on various runtime conditions.
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(OnClassCondition.class)
public @interface ConditionalOnClass {
Class<?>[] value() default {};
String[] name() default {};
}
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(OnBeanCondition.class)
public @interface ConditionalOnMissingBean {
Class<?>[] value() default {};
String[] type() default {};
String[] name() default {};
}
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {
String[] value() default {};
String prefix() default "";
String[] name() default {};
String havingValue() default "";
boolean matchIfMissing() default false;
}Auto-configuration for web applications including Spring MVC, WebFlux, embedded servers, and web-related components.
@AutoConfiguration
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass(DispatcherServlet.class)
public class DispatcherServletAutoConfiguration {
// Configuration for Spring MVC DispatcherServlet
}
@AutoConfiguration
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass(ServletRequest.class)
public class ServletWebServerFactoryAutoConfiguration {
// Configuration for servlet web server factories
}
@AutoConfiguration
@ConditionalOnWebApplication(type = Type.REACTIVE)
@ConditionalOnClass(WebFluxConfigurer.class)
public class WebFluxAutoConfiguration {
// Configuration for Spring WebFlux
}Comprehensive data access auto-configurations for relational databases, NoSQL systems, and data repositories.
@AutoConfiguration
@ConditionalOnClass({DataSource.class, JdbcTemplate.class})
public class DataSourceAutoConfiguration {
// DataSource configuration
}
@AutoConfiguration
@ConditionalOnClass(JpaRepository.class)
@ConditionalOnMissingBean({JpaRepositoryFactoryBean.class, JpaRepositoryConfigExtension.class})
public class JpaRepositoriesAutoConfiguration {
// JPA repositories configuration
}
@AutoConfiguration
@ConditionalOnClass({RedisOperations.class, JedisConnection.class})
public class RedisAutoConfiguration {
// Redis configuration
}Auto-configuration for Spring Security including servlet security, reactive security, OAuth2, and SAML integration.
@AutoConfiguration
@ConditionalOnClass(SecurityFilterChain.class)
@ConditionalOnWebApplication(type = Type.SERVLET)
public class SecurityAutoConfiguration {
// Spring Security configuration
}
@AutoConfiguration
@ConditionalOnClass({OAuth2AuthorizedClient.class, ReactiveOAuth2AuthorizedClientService.class})
@ConditionalOnWebApplication(type = Type.REACTIVE)
public class ReactiveOAuth2ClientAutoConfiguration {
// Reactive OAuth2 client configuration
}Auto-configurations for messaging systems including JMS, AMQP (RabbitMQ), Apache Kafka, and Apache Pulsar.
@AutoConfiguration
@ConditionalOnClass({Message.class, JmsTemplate.class})
public class JmsAutoConfiguration {
// JMS configuration
}
@AutoConfiguration
@ConditionalOnClass({RabbitTemplate.class, Channel.class})
public class RabbitAutoConfiguration {
// RabbitMQ configuration
}
@AutoConfiguration
@ConditionalOnClass(KafkaTemplate.class)
public class KafkaAutoConfiguration {
// Apache Kafka configuration
}Auto-configurations for template engines including Thymeleaf, FreeMarker, Mustache, and Groovy templates.
@AutoConfiguration
@ConditionalOnClass({TemplateMode.class, SpringTemplateEngine.class})
public class ThymeleafAutoConfiguration {
// Thymeleaf template engine configuration
}
@AutoConfiguration
@ConditionalOnClass({freemarker.template.Configuration.class, FreeMarkerConfigurationFactory.class})
public class FreeMarkerAutoConfiguration {
// FreeMarker template engine configuration
}Auto-configurations for JSON processing libraries including Jackson, Gson, and JSON-B.
@AutoConfiguration
@ConditionalOnClass(ObjectMapper.class)
public class JacksonAutoConfiguration {
// Jackson JSON processing configuration
}
@AutoConfiguration
@ConditionalOnClass(Gson.class)
public class GsonAutoConfiguration {
// Google Gson configuration
}Auto-configurations for caching providers including Redis, Caffeine, EhCache, and Hazelcast.
@AutoConfiguration
@ConditionalOnClass(CacheManager.class)
@ConditionalOnBean(CacheAspectSupport.class)
public class CacheAutoConfiguration {
// Cache abstraction configuration
}
@AutoConfiguration
@ConditionalOnClass({RedisOperations.class, RedisCacheManager.class})
public class RedisCacheConfiguration {
// Redis cache configuration
}Standardized API for defining and accessing connection details for external services including databases, messaging systems, and caching providers.
/**
* Base interface for types that provide connection details to remote services
*/
public interface ConnectionDetails {
// Marker interface - specific implementations provide actual connection details
}
/**
* Factory to create ConnectionDetails from a given source
*/
public interface ConnectionDetailsFactory<S, D extends ConnectionDetails> {
D getConnectionDetails(S source);
}
/**
* Details required to establish a connection to a JDBC database
*/
public interface JdbcConnectionDetails extends ConnectionDetails {
String getJdbcUrl();
default String getUsername() { return null; }
default String getPassword() { return null; }
default String getDriverClassName() { return null; }
}public class AutoConfigurationPackages {
public static List<String> get(BeanFactory beanFactory);
public static void register(BeanDefinitionRegistry registry, String... packageNames);
}
public final class AutoConfigurations extends Configurations {
public static AutoConfigurations of(Class<?>... classes);
}
public interface AutoConfigurationMetadata {
boolean wasProcessed(String className);
Integer getInteger(String className, String key);
Integer getInteger(String className, String key, Integer defaultValue);
Set<String> getSet(String className, String key);
Set<String> getSet(String className, String key, Set<String> defaultValue);
String get(String className, String key);
String get(String className, String key, String defaultValue);
}public enum SearchStrategy {
CURRENT, ANCESTORS, ALL
}
public final class ConditionMessage {
public static ConditionMessage empty();
public static ConditionMessage of(String message, Object... args);
public ConditionMessage andCondition(String condition, Object... args);
public ConditionMessage because(String reason, Object... args);
}
public class ConditionOutcome {
public ConditionOutcome(boolean match, String message);
public ConditionOutcome(boolean match, ConditionMessage message);
public boolean isMatch();
public String getMessage();
}