2>:@ConditionalOnBean与@ConditionalOnMissingBean
时间: 2023-10-17 08:26:28 浏览: 151
@ConditionalOnBean 和 @ConditionalOnMissingBean 是 Spring Framework 中的注解,用于控制 Bean 的创建条件。
@ConditionalOnBean 注解用于指定在存在指定的 Bean 时才创建当前的 Bean。它接受一个或多个 Class 类型的参数,表示需要存在的 Bean 的类型。当所有指定的 Bean 都存在时,才会创建被注解的 Bean。
@ConditionalOnMissingBean 注解与 @ConditionalOnBean 相反,用于指定在不存在指定的 Bean 时才创建当前的 Bean。同样,它也接受一个或多个 Class 类型的参数,表示需要不存在的 Bean 的类型。当所有指定的 Bean 都不存在时,才会创建被注解的 Bean。
这两个注解通常与 @Configuration 和 @Bean 注解一起使用,用于控制条件化的 Bean 创建。可以根据应用需求,按照不同的条件来创建不同的 Bean 实例,并且避免冲突或重复创建相同类型的 Bean。
相关问题
@ConditionalOnBean 与@ConditionalOnMissingBean
@ConditionalOnBean和@ConditionalOnMissingBean注解都是Spring框架中的条件注解,用于在配置类中根据特定条件来决定是否创建某个Bean。
@ConditionalOnBean注解的作用是:只有当容器中存在指定的Bean时,才会创建被注解的Bean。可以理解为,它是一个创建Bean的条件。
@ConditionalOnMissingBean注解的作用是:只有当容器中不存在指定的Bean时,才会创建被注解的Bean。可以理解为,它是一个不创建Bean的条件。
这两个注解都是@Conditional注解的派生注解,可以通过指定不同的条件来控制Bean的创建与否。这些条件可以是一个或多个Spring提供的内置条件,也可以是自定义的条件。
总结起来,@ConditionalOnBean用于当容器中存在指定的Bean时创建被注解的Bean,而@ConditionalOnMissingBean用于当容器中不存在指定的Bean时创建被注解的Bean。这两个注解都是通过@Conditional注解来实现条件控制的。
参考资料:
@ConditionalOnBean and @ConditionalOnMissingBean in Spring Boot. Available at: https://www.baeldung.com/spring-boot-conditionalonbean
========================== CONDITION EVALUATION DELTA ========================== Positive matches: ----------------- LettuceConnectionConfiguration#redisConnectionFactory matched: - @ConditionalOnMissingBean (types: org.springframework.data.redis.connection.RedisConnectionFactory; SearchStrategy: all) did not find any beans (OnBeanCondition) RedisReactiveAutoConfiguration#reactiveRedisTemplate matched: - @ConditionalOnBean (types: org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; SearchStrategy: all) found bean 'redisConnectionFactory'; @ConditionalOnMissingBean (names: reactiveRedisTemplate; SearchStrategy: all) did not find any beans (OnBeanCondition) RedisReactiveAutoConfiguration#reactiveStringRedisTemplate matched: - @ConditionalOnBean (types: org.springframework.data.redis.connection.ReactiveRedisConnectionFactory; SearchStrategy: all) found bean 'redisConnectionFactory'; @ConditionalOnMissingBean (names: reactiveStringRedisTemplate; SearchStrategy: all) did not find any beans (OnBeanCondition) Negative matches: ----------------- None Exclusions: ----------- None Unconditional classes: ---------------------- None
根据你提供的信息,这是Spring Boot在进行条件评估时的结果。根据结果显示,有一些配置和条件匹配成功,而没有匹配失败的情况。
- `LettuceConnectionConfiguration#redisConnectionFactory`成功匹配,它是一个`RedisConnectionFactory`类型的Bean,并且没有找到其他同类型的Bean。
- `RedisReactiveAutoConfiguration#reactiveRedisTemplate`成功匹配,它依赖于`redisConnectionFactory` Bean,并且没有找到名为`reactiveRedisTemplate`的其他Bean。
- `RedisReactiveAutoConfiguration#reactiveStringRedisTemplate`成功匹配,它也依赖于`redisConnectionFactory` Bean,并且没有找到名为`reactiveStringRedisTemplate`的其他Bean。
这些匹配意味着在你的应用程序中已经成功配置了Redis连接和相关的模板(`RedisTemplate`、`ReactiveRedisTemplate`等),可以在其他地方使用它们来操作Redis数据库。
请注意,这只是条件评估的结果,如果你有其他配置或条件,可能会有不同的结果。如果需要进一步的帮助,请提供更多关于你的配置和条件的信息。
阅读全文