Spring Boot 中的 @ConditionalOnBean 注解详解
1. 前言
在 Spring Boot 中,条件注解(Conditional 注解)是一种强大的功能,允许我们根据某些条件动态地注册或跳过特定的 Bean。其中,@ConditionalOnBean 是最常用的条件注解之一,它的作用是:当 Spring 容器中存在指定的 Bean 时,当前 Bean 才会被注册。
2. @ConditionalOnBean 作用与基本用法
2.1 @ConditionalOnBean 的作用
@ConditionalOnBean 主要用于以下场景:
- 按需加载 Bean:只有在某个 Bean 存在时,另一个 Bean 才会被创建。
- 模块化设计:某些功能模块需要依赖特定 Bean 才能启用,例如仅当某个组件存在时,自动配置才会生效。
- 避免 Bean 冲突:如果某个 Bean 依赖其他 Bean,则可使用
@ConditionalOnBean确保它不会因缺少依赖而加载失败。
2.2 基本用法
示例:当 DataSource Bean 存在时,才创建 MyService Bean
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;
@Configuration
public class MyConfig {
@Bean
public DataSource dataSource() {
// 这里模拟 DataSource 实例,实际可用 HikariDataSource、Druid 等
return new FakeDataSource();
}
@Bean
@ConditionalOnBean(DataSource.class)
// 仅当 DataSource 存在时,才创建 MyService
public MyService myService() {
return new MyService();
}
}
{
{
System.out.println();
}
}
{
}


