Bird
Raised Fist0
Spring Bootframework~10 mins

Custom auto-configuration in Spring Boot - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Custom auto-configuration
Start Application
↓
Spring Boot scans classpath
↓
Find @EnableAutoConfiguration
↓
Load auto-config classes
↓
Check @Conditional annotations
↓
Apply config
↓
Register beans
↓
Application context ready
Spring Boot starts, scans for auto-configuration classes, checks conditions, and applies custom configurations if conditions are met.
Execution Sample
Spring Boot
@Configuration
@ConditionalOnClass(DataSource.class)
public class MyDataSourceAutoConfig {
  @Bean
  public DataSource dataSource() {
    return new HikariDataSource();
  }
}
Defines a custom auto-configuration that creates a DataSource bean only if DataSource class is on the classpath.
Execution Table
StepActionCondition CheckResultBeans Registered
1Start Spring Boot appN/ABegin scanningNone
2Find @EnableAutoConfigurationN/ALoad auto-config classesNone
3Check MyDataSourceAutoConfig @ConditionalOnClassIs DataSource class present?YesNone
4Apply MyDataSourceAutoConfigN/ACreate DataSource beanDataSource bean
5Finish context setupN/AContext readyDataSource bean
💡 All auto-configurations processed; application context is ready with registered beans.
Variable Tracker
VariableStartAfter Step 3After Step 4Final
beansRegistered001 (DataSource)1 (DataSource)
autoConfigAppliedfalsetruetruetrue
Key Moments - 2 Insights
Why does the DataSource bean only register if the DataSource class is on the classpath?
Because of the @ConditionalOnClass annotation checked at Step 3 in the execution_table, which ensures the configuration applies only if the class exists.
What happens if the condition in @ConditionalOnClass is false?
The configuration is skipped (see Step 3 result 'No'), so no beans from that config are registered.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, at which step is the DataSource bean registered?
AStep 4
BStep 3
CStep 2
DStep 5
💡 Hint
Check the 'Beans Registered' column in the execution_table at each step.
According to variable_tracker, what is the value of beansRegistered after Step 4?
A0
B2
C1
DUndefined
💡 Hint
Look at the 'beansRegistered' row under 'After Step 4' in variable_tracker.
If the DataSource class was missing, what would happen at Step 3 in the execution_table?
ABeans would be registered anyway
BCondition check would be No and config skipped
CCondition check would be Yes
DApplication would crash
💡 Hint
Refer to the 'Condition Check' and 'Result' columns at Step 3 in execution_table.
Concept Snapshot
Custom auto-configuration in Spring Boot:
- Create @Configuration class with @Conditional annotations
- Spring Boot loads it if conditions match
- Beans inside are registered automatically
- Use @ConditionalOnClass to check class presence
- Enables modular, flexible setup without manual config
Full Transcript
When a Spring Boot application starts, it scans the classpath for auto-configuration classes marked with @EnableAutoConfiguration. Each auto-configuration class is checked against conditions like @ConditionalOnClass to decide if it should apply. If conditions are met, Spring Boot registers the beans defined in that configuration. For example, a custom DataSource bean is only created if the DataSource class is available. This process allows automatic setup of components without manual configuration. The execution table shows each step from app start to context ready, tracking condition checks and bean registration. Variable tracking shows how the number of registered beans changes. Key moments clarify why conditions matter and what happens if they fail. The visual quiz tests understanding of when beans register and how conditions affect the flow.

Practice

(1/5)
1. What is the main purpose of custom auto-configuration in Spring Boot?
easy
A. To automatically create beans based on specific conditions
B. To manually register beans in the application context
C. To disable all default Spring Boot configurations
D. To write custom SQL queries for database access

Solution

  1. Step 1: Understand auto-configuration concept

    Custom auto-configuration automatically creates beans when certain conditions are met, reducing manual setup.
  2. 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.
  3. Final Answer:

    To automatically create beans based on specific conditions -> Option A
  4. Quick Check:

    Auto-configuration = automatic bean creation [OK]
Hint: Auto-configuration means beans created automatically [OK]
Common Mistakes:
  • Confusing auto-configuration with manual bean registration
  • Thinking it disables default configurations
  • Mixing it with database query writing
2. Which annotation is commonly used to mark a class as a custom auto-configuration in Spring Boot?
easy
A. @Configuration
B. @Component
C. @EnableAutoConfiguration
D. @SpringBootApplication

Solution

  1. Step 1: Identify annotation for configuration classes

    @Configuration marks a class as a source of bean definitions, suitable for auto-configuration classes.
  2. Step 2: Exclude other annotations

    @Component is generic, @EnableAutoConfiguration is used on main app class, @SpringBootApplication is a composite annotation.
  3. Final Answer:

    @Configuration -> Option A
  4. Quick Check:

    Auto-config class needs @Configuration [OK]
Hint: Auto-config classes use @Configuration annotation [OK]
Common Mistakes:
  • Using @Component instead of @Configuration
  • Confusing @EnableAutoConfiguration with auto-config class annotation
  • Using @SpringBootApplication on config classes
3. Given this custom auto-configuration snippet, what bean will be created if 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";
    }
}
medium
A. No bean will be created
B. A bean named featureBean with value "Feature Enabled" will be created
C. A bean named myService will be created
D. An exception will be thrown at startup

Solution

  1. Step 1: Check conditions for bean creation

    Bean is created only if class com.example.MyService exists and property my.feature.enabled=true.
  2. Step 2: Given conditions are met

    Since both conditions are true, the featureBean method creates a bean with value "Feature Enabled".
  3. Final Answer:

    A bean named featureBean with value "Feature Enabled" will be created -> Option B
  4. Quick Check:

    Conditions met = bean created [OK]
Hint: Bean created only if class and property conditions are true [OK]
Common Mistakes:
  • Ignoring @ConditionalOnProperty and assuming bean always created
  • Confusing bean name with class name
  • Expecting exceptions when conditions are met
4. Identify the error in this custom auto-configuration class:
@Configuration
@ConditionalOnClass(name = "com.example.Service")
public class ServiceAutoConfiguration {
    @Bean
    public Service service() {
        return new Service();
    }

    @Bean
    public Service service() {
        return new Service();
    }
}
medium
A. Missing @ConditionalOnProperty annotation
B. No error, code is valid
C. Service class not imported
D. Duplicate bean method names causing a compilation error

Solution

  1. Step 1: Check bean method definitions

    Two methods named service() exist, both annotated with @Bean, causing duplicate bean names.
  2. Step 2: Understand Spring bean naming rules

    Bean names must be unique; duplicate method names cause compilation or context startup errors.
  3. Final Answer:

    Duplicate bean method names causing a compilation error -> Option D
  4. Quick Check:

    Duplicate @Bean methods = error [OK]
Hint: Bean method names must be unique in config classes [OK]
Common Mistakes:
  • Ignoring duplicate method names
  • Thinking missing @ConditionalOnProperty is an error here
  • Assuming missing import causes this error
5. You want to create a custom auto-configuration that only creates a bean if no other bean of the same type exists and a property 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 method
hard
A. @Configuration on class, @ConditionalOnClass on bean method
B. @Component on class, @ConditionalOnBean on bean method
C. @Configuration on class, @ConditionalOnMissingBean and @ConditionalOnProperty on bean method
D. @EnableAutoConfiguration on class, no conditions on bean method

Solution

  1. Step 1: Identify class-level annotation for config

    @Configuration is correct to mark a class as configuration for auto-configuration.
  2. Step 2: Choose bean method conditions

    @ConditionalOnMissingBean ensures no existing bean of the type exists; @ConditionalOnProperty checks the property is true.
  3. 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.
  4. Final Answer:

    @Configuration on class, @ConditionalOnMissingBean and @ConditionalOnProperty on bean method -> Option C
  5. Quick Check:

    Missing bean + property conditions = @Configuration on class, @ConditionalOnMissingBean and @ConditionalOnProperty on bean method [OK]
Hint: Use @ConditionalOnMissingBean and @ConditionalOnProperty together [OK]
Common Mistakes:
  • Using @ConditionalOnBean instead of @ConditionalOnMissingBean
  • Putting conditions on class instead of bean method
  • Confusing @EnableAutoConfiguration with config class annotation
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard