• SpringBoot中DataSourceAutoConfiguration注解


    最近在学习springBoot时,其中有很大的一个核心的只是点:自动配置。

    通过 DataSourceAutoConfiguration 学习 自动配置是如何实现的。

    自动配置中比较重要的一个点就是 条件化配置?

    1、条件化配置

     JdbcTemplateCondition 的定义

    package com.qxy.readinglist.conditions;
    
    
    import org.springframework.context.annotation.Condition;
    import org.springframework.context.annotation.ConditionContext;
    import org.springframework.core.type.AnnotatedTypeMetadata;
    
    
    /**
     * 这个类 只有在 ClassPath里存在J
     */
    public class JdbcTemplateCondition implements Condition {
        @Override
        public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
            try {
                //加载 JdbcTemplate
                conditionContext.getClassLoader().loadClass("org.springframework.jdbc.core.JdbcTemplate");
                return true;
            } catch (ClassNotFoundException e) {
                return false;
            }
        }
    }
    

    如何 JdbcTemplateCondition

    @Bean
    @Conditional(JdbcTemplateCondition.class)//只有满足 JdbcTemplateCondition 条件,才会生成 bean
    public MyService myService(){
        return new MyService();
    }
    

     到此位置,你应该知道 条件化配置是怎么回事了吧,然后继续来看看 DataSourceAutoConfiguration

    @Configuration
    @ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class })
    @EnableConfigurationProperties(DataSourceProperties.class)
    @Import({ DataSourcePoolMetadataProvidersConfiguration.class,
    		DataSourceInitializationConfiguration.class })
    public class DataSourceAutoConfiguration {
       .....      
    }
    

      从上边可以看到,ConditionalOnClass,这个就是一个条件化注释,含义是:ClassPath里边有存在,DataSource.class, EmbeddedDatabaseType.class

    Read the fucking manual and source code
  • 相关阅读:
    Quagga How to use Quagga
    Quagga Case 4
    Quagga Case 3
    Quagga Case 2
    Quagga Routing Suite
    quagga
    quagga 的原理解析 zebra原理解析
    zebra线程管理源码简析
    【习题 4-8 UVA
    【习题 4-7 UVA
  • 原文地址:https://www.cnblogs.com/qxynotebook/p/9735174.html
Copyright © 2020-2023  润新知