Common Spring Boot Annotations and Their Usage
This article provides a comprehensive overview of Spring Boot and related Spring annotations, explaining their purposes, usage patterns, and code examples, helping developers master configuration, component scanning, conditional bean registration, and core Spring Boot features for efficient backend development.
Spring Boot has become a mainstream framework for Java application development, simplifying configuration through convention over configuration.
Understanding the various Spring and Spring Boot annotations is essential for efficient development and interview preparation.
Spring related six annotations
1. @Configuration – defines a configuration class that can replace XML configuration. Methods annotated with @Bean are processed by AnnotationConfigApplicationContext or AnnotationConfigWebApplicationContext to build bean definitions.
@Configuration
public class TaskAutoConfiguration {
@Bean
@Profile("biz-electrfence-controller")
public BizElectrfenceControllerJob bizElectrfenceControllerJob() {
return new BizElectrfenceControllerJob();
}
@Bean
@Profile("biz-consume-1-datasync")
public BizBikeElectrFenceTradeSyncJob bizBikeElectrFenceTradeSyncJob() {
return new BizBikeElectrFenceTradeSyncJob();
}
}2. @ComponentScan – works with @Controller, @Service, @Repository, etc., to automatically register components in the Spring container.
@ComponentScan(value = "com.abacus.check.api")
public class CheckApiApplication {
public static void main(String[] args) {
SpringApplication.run(CheckApiApplication.class, args);
}
} @SpringBootApplicationalso includes @ComponentScan and can be configured via its scanBasePackages attribute.
@SpringBootApplication(scanBasePackages = {"com.abacus.check.api", "com.abacus.check.service"})
public class CheckApiApplication {
public static void main(String[] args) {
SpringApplication.run(CheckApiApplication.class, args);
}
}3. @Conditional – allows conditional bean registration based on custom conditions, with derived annotations such as @ConditionalOnProperty, @ConditionalOnBean, etc.
4. @Import – imports specified classes into the Spring IoC container.
@Import({Square.class, Circular.class})
@Configuration
public class MainConfig {}5. @ImportResource – imports XML configuration files.
@ImportResource("classpath:spring-redis.xml")
public class CheckApiApplication {}6. @Component – a meta‑annotation that marks a class as a Spring component; it is the base for @Controller, @Service, and @Repository.
Spring Boot core 20 annotations
1. @SpringBootApplication – combines @Configuration, @EnableAutoConfiguration, and @ComponentScan; marks the main class of a Spring Boot application.
@SpringBootApplication(exclude = {
MongoAutoConfiguration.class,
MongoDataAutoConfiguration.class,
DataSourceAutoConfiguration.class,
ValidationAutoConfiguration.class,
MybatisAutoConfiguration.class,
MailSenderAutoConfiguration.class
})
public class API {
public static void main(String[] args) {
SpringApplication.run(API.class, args);
}
}2. @EnableAutoConfiguration – enables Spring Boot’s auto‑configuration mechanism.
3. @SpringBootConfiguration – a specialization of @Configuration for Spring Boot.
4. @ConditionalOnBean – registers a bean only when a specified bean is present in the context.
@Bean
@ConditionalOnBean(DefaultMQProducer.class)
public RocketMQProducerLifecycle rocketMQLifecycle() {
return new RocketMQProducerLifecycle();
}5. @ConditionalOnMissingBean – opposite of @ConditionalOnBean; registers a bean only when the specified bean is absent.
@Bean
@ConditionalOnMissingBean(RocketMQProducer.class)
public RocketMQProducer mqProducer() {
return new RocketMQProducer();
}6. @ConditionalOnClass – registers a bean only if a given class is on the classpath.
@Bean
@ConditionalOnClass(HealthIndicator.class)
public HealthIndicator rocketMQProducerHealthIndicator(Map<String, DefaultMQProducer> producers) {
if (producers.size() == 1) {
return new RocketMQProducerHealthIndicator(producers.values().iterator().next());
}
}7. @ConditionalOnMissingClass – registers a bean only when a class is missing from the classpath.
8. @ConditionalOnWebApplication – activates configuration only for web applications (ANY, SERVLET, REACTIVE).
9. @ConditionalOnNotWebApplication – activates configuration when the application is not a web application.
10. @ConditionalOnProperty – activates configuration based on a property value in application.properties.
@Bean
@ConditionalOnProperty(value = "rocketmq.producer.enabled", havingValue = "true", matchIfMissing = true)
public RocketMQProducer mqProducer() {
return new RocketMQProducer();
}11. @ConditionalOnExpression – activates configuration when a SpEL expression evaluates to true.
@Configuration
@ConditionalOnExpression("${enabled:false}")
public class BigpipeConfiguration {
@Bean
public OrderMessageMonitor orderMessageMonitor(ConfigContext configContext) {
return new OrderMessageMonitor(configContext);
}
}12. @ConditionalOnJava – activates configuration based on the Java version.
13. @ConditionalOnResource – activates configuration when a specific resource is present on the classpath.
@Bean
@ConditionalOnResource(resources = "classpath:shiro.ini")
protected Realm iniClasspathRealm() {
return new Realm();
}14. @ConditionalOnJndi – activates configuration when a JNDI entry exists.
15. @ConditionalOnCloudPlatform – activates configuration for a specific cloud platform.
16. @ConditionalOnSingleCandidate – activates when there is a single bean of a given type or one marked as primary.
17. @ConfigurationProperties – binds external properties (e.g., YAML or .properties files) to a POJO.
@Data
@ConfigurationProperties("rocketmq.consumer")
public class RocketMQConsumerProperties extends RocketMQProperties {
private boolean enabled = true;
private String consumerGroup;
// other fields omitted for brevity
}18. @EnableConfigurationProperties – registers @ConfigurationProperties beans automatically.
@Configuration
@EnableConfigurationProperties({RocketMQProducerProperties.class, RocketMQConsumerProperties.class})
public class RocketMQAutoConfiguration {
@Value("${spring.application.name}")
private String applicationName;
}19. @AutoConfigureAfter – ensures that a configuration class runs after another specified auto‑configuration.
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MybatisAutoConfiguration {}20. @AutoConfigureBefore – opposite of @AutoConfigureAfter; runs before the specified auto‑configuration.
21. @AutoConfigureOrder – defines the order of auto‑configuration processing.
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@Configuration
@ConditionalOnWebApplication
@Import(BeanPostProcessorsRegistrar.class)
public class EmbeddedServletContainerAutoConfiguration {
// inner configurations omitted for brevity
}Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
Selected Java Interview Questions
A professional Java tech channel sharing common knowledge to help developers fill gaps. Follow us!
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
