"); outcomes[i] = getOutcome(onSingleCandidateTypes, ConditionalOnSingleCandidate.class...2.2 ConditionalOnSingleCandidate 注解处理我们继续查看 ConditionalOnSingleCandidate 注解处理逻辑的源码: if (metadata.isAnnotated...(ConditionalOnSingleCandidate.class.getName())) { Spec spec = new...如果元数据中存在 @ConditionalOnSingleCandidate 注解,则创建了一个 SingleCandidateSpec 的对象 spec ,并传入上下文 【context】、元数据 【...metadata】 和注解信息 【annotations】 ,该类是专门针对 @ConditionalOnSingleCandidate 注解的条件规范。
基于Bean的条件注解 @ConditionalOnBean(Spring容器中存在指明的bean)、@ConditionalOnMissingBean(Spring容器中不存在指明的bean)以及ConditionalOnSingleCandidate...())) { // 相同的逻辑,针对@ConditionalOnSingleCandidate注解 BeanSearchSpec spec = new SingleCandidateBeanSearchSpec...(context, metadata, ConditionalOnSingleCandidate.class); List matching = getMatchingBeans...(context, spec); if (matching.isEmpty()) { return ConditionOutcome.noMatch( "@ConditionalOnSingleCandidate...context.getBeanFactory(), matching)) { // 多了一层判断,判断是否只有一个bean return ConditionOutcome.noMatch("@ConditionalOnSingleCandidate
org.springframework.context.annotation.Configuration@ConditionalOnClass({ SqlSessionFactory.class, SqlSessionFactoryBean.class })@ConditionalOnSingleCandidate...DataSourceAutoConfiguration.class)public class MybatisAutoConfiguration implements InitializingBean { 不多帖了,都是废话,看前几行就行了,醒目的一行啊,@ConditionalOnSingleCandidate...DataSourceTransactionManagerAutoConfiguration,如下: 12345 public class DataSourceTransactionManagerAutoConfiguration { @Configuration @ConditionalOnSingleCandidate...(DataSource.class) static class DataSourceTransactionManagerConfiguration { 又看到了什么,@ConditionalOnSingleCandidate...咦,不着急,此时就要看看@ConditionalOnSingleCandidate注解搞了什么,进去看看,有如下的介绍: 1 The condition will also match if multiple
System.out.println(StrUtil.format("{}:{}", k, v))); System.out.println(System.lineSeparator()); } } 9)@ConditionalOnSingleCandidate...@ConditionalOnSingleCandidate,判断指定的类型是否只有一个bean,示例如下 @SpringBootApplication public class TestApplication...) public Double doubleValue(){ return 10D; } @Bean("intValueConditional") @ConditionalOnSingleCandidate...intValueConditional() { return "intValueConditional"; } @Bean("doubleValueConditional") @ConditionalOnSingleCandidate...判断当前java运行版本 @ConditionalOnExpression 使用Spring表达式来进行判断,也就是SpEL表达式 @ConditionalOnResource 判断是否有指定的静态资源 @ConditionalOnSingleCandidate
org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate...class RedisAutoConfiguration { @Bean @ConditionalOnMissingBean(name = "redisTemplate") @ConditionalOnSingleCandidate...redisConnectionFactory); return template; } @Bean @ConditionalOnMissingBean @ConditionalOnSingleCandidate
public class RedisAutoConfiguration { @Bean @ConditionalOnMissingBean(name = "redisTemplate") @ConditionalOnSingleCandidate...} @Bean @ConditionalOnMissingBean @ConditionalOnSingleCandidate(RedisConnectionFactory.class...@ConditionalOnSingleCandidate:只有在当前上下文中存在且只有一个指定类型的 bean 候选者时,才会创建这个 bean。...方法先来看看 redisTemplate 方法的源码【Spring Boot 2.7.9】:@Bean@ConditionalOnMissingBean(name = "redisTemplate")@ConditionalOnSingleCandidate...stringRedisTemplate 方法我们再来看看 stringRedisTemplate 方法的源码【Spring Boot 2.7.9】:@Bean@ConditionalOnMissingBean@ConditionalOnSingleCandidate
class RedisAutoConfiguration { @Bean @ConditionalOnMissingBean(name = "redisTemplate") @ConditionalOnSingleCandidate...redisConnectionFactory); return template; } @Bean @ConditionalOnMissingBean @ConditionalOnSingleCandidate
RabbitConnectionFactoryCreator.class) protected static class RabbitTemplateConfiguration{ @Bean @ConditionalOnSingleCandidate...public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {} @Bean @ConditionalOnSingleCandidate...RabbitTemplateConfiguration.class) protected static class MessagingTemplateConfiguration { @Bean @ConditionalOnSingleCandidate
Configuration(proxyBeanMethods = false) @ConditionalOnClass({ DataSource. class, JdbcTemplate.class }) @ConditionalOnSingleCandidate...@Configuration(proxyBeanMethods = false)Q @ConditionalOnsingleCandidate(JdbcTemplate . class) @ConditionalOnMiss
同时是OnBeanCondition是@ConditionalOnBean,@ConditionalOnSingleCandidate和ConditionalOnMissingBean的条件类。..."beans") .items(Style.QUOTE, matchResult.getNamesOfAllMatches()); } // (2),配置类(metadata)标注@ConditionalOnSingleCandidate...注解的情况 if (metadata.isAnnotated(ConditionalOnSingleCandidate.class.getName())) { BeanSearchSpec spec...= new SingleCandidateBeanSearchSpec(context, metadata, ConditionalOnSingleCandidate.class);...== SearchStrategy.ALL)) { return ConditionOutcome.noMatch(ConditionMessage .forCondition(ConditionalOnSingleCandidate.class
@Configuration(proxyBeanMethods = false) @EnableConfigurationProperties(HibernateProperties.class) @ConditionalOnSingleCandidate
@Bean @ConditionalOnSingleCandidate(Connect ionFactory. class) @ConditionalOnMissingBean(name = "jimsListenerContainerFactory...@Bean @Condit ionalOnMissingBean @ConditionalOnSingleCandidate(ConnectionFactory. class) public Jms Template...class MessagingTemplateConfiguration { @Bean @ConditionalOnMiss ingBean( JmsMessageOperations. class) @ConditionalOnSingleCandidate
ConditionalOnJava 16、@ConditionalOnResource 17、@ConditionalOnJndi 18、@ConditionalOnCloudPlatform 19、@ConditionalOnSingleCandidate...19、@ConditionalOnSingleCandidate 组合 @Conditional 注解,当指定的 class 在容器中只有一个 Bean,或者同时有多个但为首选时才开启配置。
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration 类中,该类源码如下: @Configuration @ConditionalOnClass({ DataSource.class, JdbcTemplate.class }) @ConditionalOnSingleCandidate...JdbcTemplateConfiguration.class) static class NamedParameterJdbcTemplateConfiguration { @Bean @Primary @ConditionalOnSingleCandidate
org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration类中,该类源码如下: @Configuration @ConditionalOnClass({ DataSource.class, JdbcTemplate.class }) @ConditionalOnSingleCandidate...static class NamedParameterJdbcTemplateConfiguration { @Bean @Primary @ConditionalOnSingleCandidate
ConditionalOnExpression 满足SpEL表达式指定 @ConditionalOnClass 系统中有指定的类 @ConditionalOnMissingClass 系统中没有指定的类 @ConditionalOnSingleCandidate
----------------------------------------------------------------------------------- @Bean @ConditionalOnSingleCandidate...------------------------------------------------------------------------------------ @Bean @ConditionalOnSingleCandidate...----------------------------------------------------------------------------------- @Bean @ConditionalOnSingleCandidate...------------------------------------------------------------------------------------ @Bean @ConditionalOnSingleCandidate
MessagingTemplateConfiguration { protected MessagingTemplateConfiguration() { } @Bean @ConditionalOnSingleCandidate...this.retryTemplateCustomizers = retryTemplateCustomizers; } @Bean @ConditionalOnSingleCandidate...mandatory : this.properties.isPublisherReturns(); } @Bean @ConditionalOnSingleCandidate
领取专属 10元无门槛券
手把手带您无忧上云