Spring Configuration
@Configuration and @Bean
@Configuration
public class AppConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public Clock clock() {
return Clock.systemDefaultZone();
}
}
Configuration Properties
@ConfigurationProperties(prefix = "app")
public class AppProperties {
private String name;
private int maxRetryCount;
private List<String> supportedLanguages;
// Getters and setters
}
@Configuration
@EnableConfigurationProperties(AppProperties.class)
public class AppConfig { }
application.properties
app.name=MyApp
app.max-retry-count=3
app.supported-languages=en,es,fr
Profile-Specific Configuration
application.properties ← Common config
application-dev.properties ← Development config
application-prod.properties ← Production config
application-test.properties ← Test config
Spring Best Practices
Configuration
- Use properties over YAML for simple configs
- Externalize configuration
- Use profiles for environments
- Validate on startup
Bean Management
- Prefer constructor injection
- Use appropriate scope
- Implement lazy initialization
- Clean up resources
Security
- Use Spring Security
- Implement CSRF protection
- Use method-level security
- Log security events
Key Points
- Understanding Spring Configuration is essential for production systems
- Always consider scalability and maintainability
- Test thoroughly before deploying to production
- Monitor performance and set up alerting
Common Patterns
- Validation: Always validate input at the boundary
- Error Handling: Use structured error responses
- Logging: Log key events for debugging
- Testing: Unit, integration, and load tests
- Documentation: Keep docs updated with code changes
Practice Problems
Design and implement a solution for Spring Configuration in a backend system. Consider scalability, error handling, and production readiness.
Solution
// Spring Configuration implementation
// Key aspects: validation, error handling, logging, testing
public class SpringConfiguration {
// Production-ready implementation
} Identify and handle edge cases for Spring Configuration. What happens under high load, with invalid input, or during failures?
Solution
// Edge case handling:
// 1. Null/empty input -> validation
// 2. High load -> rate limiting, queuing
// 3. Failures -> retries, circuit breaker
// 4. Concurrent access -> locks, idempotency Write a testing strategy for Spring Configuration. Include unit tests, integration tests, and performance tests.
Solution
// Test plan:
// - Unit: 80% coverage target
// - Integration: API contracts
// - Performance: latency, throughput
// - Chaos: failure injection Quiz
1. What does @Configuration indicate?
2. How do you bind properties to a Java class?
3. What is a common mistake when implementing Spring Configuration?
Flashcards
Question
@Configuration purpose?
Click to reveal answer
Answer
Marks class that defines beans via @Bean methods
Question
@ConfigurationProperties purpose?
Click to reveal answer
Answer
Binds grouped properties (prefix) to a POJO
Question
Spring Configuration best practices
Click to reveal answer
Answer
Follow SOLID principles, write clean code, test thoroughly, document decisions, and monitor in production.
Revision Notes
Key Takeaways
- 1. @Configuration defines beans via @Bean methods
- 2. @ConfigurationProperties binds properties to POJOs
- 3. Profile-specific configs: application-{profile}.properties
- 4. Java-based config replaces XML configuration
Interview Tips
- • Know how to create custom configuration
- • Understand profile-specific configs
Cheat Sheet
Spring Configuration
- @Configuration: Class with @Bean methods
- @Bean: Defines a Spring bean
- @ConfigurationProperties: Binds properties to POJO
- Profiles: application-{dev,prod,test}.properties