Spring Java Configuration Interview Questions and Answers
Master Spring Java Configuration with interview questions covering @Configuration, @Bean, @ComponentScan, @Import, @PropertySource, Java Config vs XML, configuration classes, profiles, and production best practices.
Introduction
In the early versions of Spring, applications were configured using large XML files.
Example
<bean id="customerService"
class="com.example.CustomerService"/>
As applications grew larger, XML configuration became difficult to maintain.
Spring introduced Java-based Configuration (Java Config), allowing developers to configure the entire application using Java classes and annotations.
Today, almost every modern Spring Boot application uses Java Configuration.
Common annotations include:
@Configuration@Bean@ComponentScan@Import@PropertySource@Profile
Java Configuration Architecture
flowchart LR
Application --> ConfigurationClass
ConfigurationClass --> BeanDefinitions
BeanDefinitions --> SpringContainer
SpringContainer --> ApplicationBeans
Q1. What is Java Configuration?
Answer
Java Configuration is the process of configuring the Spring IoC Container using Java classes instead of XML.
Configuration classes define
- Beans
- Component scanning
- External properties
- Profiles
- Imports
Benefits
- Type safety
- Better IDE support
- Easier refactoring
- Less XML
- Better readability
Q2. What is @Configuration?
@Configuration indicates that a class contains Spring bean definitions.
Example
@Configuration
public class AppConfig {
}
Spring processes this class during startup and registers all defined beans.
Q3. What is @Bean?
@Bean tells Spring that the returned object should be managed as a Spring Bean.
Example
@Configuration
public class AppConfig {
@Bean
public PaymentService paymentService() {
return new PaymentService();
}
}
Spring creates the bean and stores it in the IoC Container.
Bean Creation
flowchart LR
ConfigurationClass --> BeanMethod
BeanMethod --> SpringContainer
SpringContainer --> PaymentService
Q4. When should we use @Bean instead of @Component?
Use @Component
- For classes you own.
Use @Bean
- For third-party libraries.
- When object creation requires custom logic.
- When constructor arguments must be manually configured.
Example
@Bean
public ObjectMapper
objectMapper(){
return new ObjectMapper();
}
Q5. What is @ComponentScan?
@ComponentScan instructs Spring to scan packages for annotated classes.
Example
@Configuration
@ComponentScan(
"com.codewithvenu")
Spring automatically registers
@Component@Service@Repository@Controller@RestController
Component Scan
flowchart LR
ComponentScan --> Controller
ComponentScan --> Service
ComponentScan --> Repository
ComponentScan --> Component
Q6. What is @Import?
@Import combines multiple configuration classes.
Example
@Configuration
@Import({
DatabaseConfig.class,
SecurityConfig.class
})
Benefits
- Modular configuration
- Better organization
- Cleaner architecture
Q7. What is @PropertySource?
@PropertySource loads external property files.
Example
@Configuration
@PropertySource(
"classpath:application.properties")
Properties become available through
@Value- Environment
- Configuration classes
Q8. What is @Profile?
@Profile activates beans for specific environments.
Example
@Bean
@Profile("dev")
public DataSource
devDataSource(){
}
Profiles
- dev
- test
- stage
- prod
Profile Selection
flowchart LR
Application --> Profile
Profile --> DevBean
Profile --> TestBean
Profile --> ProdBean
Only beans matching the active profile are created.
Q9. Java Configuration vs XML Configuration
| Java Config | XML Config |
|---|---|
| Type-safe | String-based |
| IDE support | Limited |
| Refactoring support | Difficult |
| Compile-time validation | Runtime errors |
| Modern approach | Legacy approach |
Java Configuration is the preferred approach for modern Spring applications.
Q10. Java Configuration Best Practices
Organize Configuration
Split large configurations into multiple classes.
Use @Configuration
Avoid mixing configuration with business logic.
Prefer Component Scanning
Reduce manual bean declarations.
Externalize Properties
Avoid hardcoded values.
Use Profiles
Separate development, testing, and production environments.
Banking Example
flowchart TD
AppConfig --> DatabaseConfig
AppConfig --> SecurityConfig
AppConfig --> MessagingConfig
DatabaseConfig --> DataSource
SecurityConfig --> JwtFilter
MessagingConfig --> KafkaProducer
SpringContainer --> CustomerService
Configuration is modular and environment-independent.
Common Interview Questions
- What is Java Configuration?
- What is
@Configuration? - What is
@Bean? @Beanvs@Component?- What is
@ComponentScan? - What is
@Import? - What is
@PropertySource? - What is
@Profile? - Java Config vs XML?
- Java Configuration best practices?
Quick Revision
| Topic | Summary |
|---|---|
| Java Config | Configure Spring using Java |
| @Configuration | Configuration class |
| @Bean | Register Spring bean |
| @ComponentScan | Scan annotated classes |
| @Import | Import configuration classes |
| @PropertySource | Load property files |
| @Profile | Environment-specific beans |
| @Value | Inject property values |
| Java Config | Preferred approach |
| XML | Legacy configuration |
Java Configuration Lifecycle
sequenceDiagram
Application->>Spring Container: Start
Spring Container->>Configuration Class: Load
Configuration Class->>Bean Methods: Execute
Bean Methods-->>Spring Container: Register Beans
Spring Container->>Component Scan: Discover Components
Component Scan-->>Spring Container: Register Components
Spring Container-->>Application: Ready
Production Example – Banking Platform
A banking platform separates configuration into multiple modules.
Configuration Structure
DatabaseConfigcreates the DataSource and JPA configuration.SecurityConfigconfigures JWT authentication and security filters.MessagingConfigconfigures Kafka producers and consumers.CacheConfigconfigures Redis.ApplicationConfigimports all configuration classes.
Profiles
- dev uses a local PostgreSQL database.
- test uses an in-memory database.
- prod connects to a managed cloud database.
flowchart LR
ApplicationConfig --> DatabaseConfig
ApplicationConfig --> SecurityConfig
ApplicationConfig --> MessagingConfig
ApplicationConfig --> CacheConfig
DatabaseConfig --> PostgreSQL
MessagingConfig --> Kafka
CacheConfig --> Redis
SecurityConfig --> JWTAuthentication
This modular configuration simplifies maintenance, improves readability, and enables different environments to use different infrastructure without changing application code.
Key Takeaways
- Java Configuration replaces XML by configuring the Spring IoC Container using Java classes and annotations.
@Configurationidentifies classes that contain Spring bean definitions.@Beanregisters objects as Spring-managed beans and is especially useful for third-party libraries or custom object creation.@ComponentScanautomatically discovers annotated components, reducing manual configuration.@Importhelps organize large applications by combining multiple configuration classes.@PropertySourceloads external configuration files, while@Profileenables environment-specific bean creation.- Java Configuration provides type safety, compile-time checking, IDE support, and easier refactoring compared to XML.
- Well-organized configuration classes improve maintainability and support enterprise-scale Spring applications.