@ConditionalOnMissingBean
是 Spring Boot 中的一个条件注解,它的作用是在某个 Bean 不存在时才会生效。
具体来说,当你在一个配置类或者一个组件类上标注了 @ConditionalOnMissingBean
注解时,它会告诉 Spring Boot 当且仅当指定的类型的 Bean 在容器中不存在时,才会将这个配置类中的 Bean 注册到容器中。
举例来说,假设你有一个接口 UserService
和两个实现类 DefaultUserService
和 CustomUserService
:
public interface UserService {
void doSomething();
}
@Service
public class DefaultUserService implements UserService {
@Override
public void doSomething() {
// ...
}
}
@Service
public class CustomUserService implements UserService {
@Override
public void doSomething() {
// ...
}
}
如果你在某个配置类中使用了 @ConditionalOnMissingBean(UserService.class)
:
@Configuration
public class MyConfig {
@Bean
@ConditionalOnMissingBean(UserService.class)
public UserService userService() {
return new DefaultUserService();
}
}
在这个例子中,如果容器中已经存在了一个类型为 UserService
的 Bean(比如 CustomUserService
),那么默认的 userService()
方法就不会被调用,也就是说它不会覆盖已有的 UserService
Bean。
如果容器中没有 UserService
类型的 Bean,那么默认的 userService()
方法会被调用,创建一个 DefaultUserService
Bean 并注册到容器中。
这样,通过 @ConditionalOnMissingBean
注解,你可以根据需要动态地选择是否注册某个 Bean,从而实现更灵活的配置。