📖 Scenario: You are building a Spring Boot application that needs a custom service automatically configured when certain conditions are met. This helps users avoid manual setup and makes your library easier to use.
🎯 Goal: Create a custom auto-configuration class that provides a bean of GreetingService only if no other bean of the same type exists. Use Spring Boot's auto-configuration mechanism and conditional annotations.
📋 What You'll Learn
Create a simple GreetingService class with a method greet() returning a greeting string.
Create a configuration class annotated with @Configuration and @ConditionalOnMissingBean for GreetingService.
Use @EnableAutoConfiguration or proper Spring Boot auto-configuration registration.
Verify the bean is created only when no other GreetingService bean is present.
💡 Why This Matters
🌍 Real World
Custom auto-configuration is used in Spring Boot starter libraries to provide default beans and simplify setup for users.
💼 Career
Understanding auto-configuration helps developers create reusable Spring Boot libraries and improve application modularity.
Progress0 / 4 steps
1
Create the GreetingService class
Create a public class called GreetingService with a public method greet() that returns the string "Hello from GreetingService!".
Spring Boot
Hint
Define a simple Java class with a method that returns a fixed greeting string.
2
Create the auto-configuration class
Create a class called GreetingAutoConfiguration annotated with @Configuration and @ConditionalOnMissingBean(GreetingService.class). Inside, define a @Bean method called greetingService() that returns a new instance of GreetingService.
Spring Boot
Hint
Use Spring annotations to create a configuration class that only creates the bean if none exists.
3
Register the auto-configuration in spring.factories
Create a file named spring.factories under src/main/resources/META-INF/ with the content: org.springframework.boot.autoconfigure.EnableAutoConfiguration=your.package.GreetingAutoConfiguration. Replace your.package with the actual package name of GreetingAutoConfiguration.
Spring Boot
Hint
This file tells Spring Boot to load your auto-configuration class automatically.
4
Test the auto-configuration bean creation
In your Spring Boot application, create a @SpringBootApplication class and inject GreetingService using @Autowired. Add a method annotated with @PostConstruct that calls greet() and stores the result in a variable called message.
Spring Boot
Hint
Use dependency injection and lifecycle hooks to verify your auto-configured bean works.
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
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 A
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
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 A
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
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 B
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
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 D
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
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 C
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 unknownstrongwhile earning +1 Grip toward your certificate.