What if your code could set itself up perfectly every time, without you lifting a finger?
Why Custom auto-configuration in Spring Boot? - Purpose & Use Cases
Imagine you build a Spring Boot app and want to add a feature that sets up beans and settings automatically for your users.
Without automation, every user must write the same setup code again and again.
Manually configuring beans for every project is repetitive and error-prone.
Users might forget important settings or configure them inconsistently.
This slows down development and causes bugs.
Custom auto-configuration lets you package your setup logic so Spring Boot applies it automatically when needed.
This means users get the right beans and settings without writing extra code.
@Configuration public class MyConfig { @Bean public MyService myService() { return new MyService(); } }
@Configuration @ConditionalOnClass(MyService.class) public class MyAutoConfig { @Bean public MyService myService() { return new MyService(); } }
It enables reusable, plug-and-play features that just work when added to any Spring Boot app.
Think of a library that auto-configures a database connection pool with sensible defaults, so developers don't have to write connection setup code every time.
Manual setup is repetitive and error-prone.
Custom auto-configuration automates bean and setting setup.
This saves time and reduces bugs by applying defaults automatically.
Practice
Solution
Step 1: Understand auto-configuration concept
Custom auto-configuration automatically creates beans when certain conditions are met, reducing manual setup.Step 2: Compare options with purpose
Only To automatically create beans based on specific conditions describes automatic bean creation based on conditions, which matches the purpose.Final Answer:
To automatically create beans based on specific conditions -> Option AQuick Check:
Auto-configuration = automatic bean creation [OK]
- Confusing auto-configuration with manual bean registration
- Thinking it disables default configurations
- Mixing it with database query writing
Solution
Step 1: Identify annotation for configuration classes
@Configuration marks a class as a source of bean definitions, suitable for auto-configuration classes.Step 2: Exclude other annotations
@Component is generic, @EnableAutoConfiguration is used on main app class, @SpringBootApplication is a composite annotation.Final Answer:
@Configuration -> Option AQuick Check:
Auto-config class needs @Configuration [OK]
- Using @Component instead of @Configuration
- Confusing @EnableAutoConfiguration with auto-config class annotation
- Using @SpringBootApplication on config classes
com.example.MyService is on the classpath and property my.feature.enabled=true?
@Configuration
@ConditionalOnClass(name = "com.example.MyService")
@ConditionalOnProperty(prefix = "my.feature", name = "enabled", havingValue = "true")
public class MyFeatureAutoConfiguration {
@Bean
public String featureBean() {
return "Feature Enabled";
}
}Solution
Step 1: Check conditions for bean creation
Bean is created only if class com.example.MyService exists and property my.feature.enabled=true.Step 2: Given conditions are met
Since both conditions are true, the featureBean method creates a bean with value "Feature Enabled".Final Answer:
A bean named featureBean with value "Feature Enabled" will be created -> Option BQuick Check:
Conditions met = bean created [OK]
- Ignoring @ConditionalOnProperty and assuming bean always created
- Confusing bean name with class name
- Expecting exceptions when conditions are met
@Configuration
@ConditionalOnClass(name = "com.example.Service")
public class ServiceAutoConfiguration {
@Bean
public Service service() {
return new Service();
}
@Bean
public Service service() {
return new Service();
}
}Solution
Step 1: Check bean method definitions
Two methods named service() exist, both annotated with @Bean, causing duplicate bean names.Step 2: Understand Spring bean naming rules
Bean names must be unique; duplicate method names cause compilation or context startup errors.Final Answer:
Duplicate bean method names causing a compilation error -> Option DQuick Check:
Duplicate @Bean methods = error [OK]
- Ignoring duplicate method names
- Thinking missing @ConditionalOnProperty is an error here
- Assuming missing import causes this error
app.feature.enabled is true. Which combination of annotations should you use on your configuration class and bean method?
A) @Configuration on class, @ConditionalOnMissingBean and @ConditionalOnProperty on bean method
B) @Component on class, @ConditionalOnBean on bean method
C) @Configuration on class, @ConditionalOnClass on bean method
D) @EnableAutoConfiguration on class, no conditions on bean methodSolution
Step 1: Identify class-level annotation for config
@Configuration is correct to mark a class as configuration for auto-configuration.Step 2: Choose bean method conditions
@ConditionalOnMissingBean ensures no existing bean of the type exists; @ConditionalOnProperty checks the property is true.Step 3: Exclude incorrect options
@Component is generic, @ConditionalOnBean requires existing bean, @ConditionalOnClass checks class presence, not bean existence, @EnableAutoConfiguration is for main app class.Final Answer:
@Configuration on class, @ConditionalOnMissingBean and @ConditionalOnProperty on bean method -> Option CQuick Check:
Missing bean + property conditions = @Configuration on class, @ConditionalOnMissingBean and @ConditionalOnProperty on bean method [OK]
- Using @ConditionalOnBean instead of @ConditionalOnMissingBean
- Putting conditions on class instead of bean method
- Confusing @EnableAutoConfiguration with config class annotation
Ready to prove it?
Pass the test and this pattern moves unknown
