Springboot 2.x 对于数据源配置这一块 @ConditionalOnMissingBean 和 @Import 两个注解组合在一起,它们放在一块是什么意思呢?
以下面这段代码为例阐述@ConditionalOnMissingBean 和 @Import 两个注解组合的含义:
@Configuration(proxyBeanMethods = false)
@Conditional(PooledDataSourceCondition.class)
@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })
protected static class PooledDataSourceConfiguration {
}
这里要表达的意思是:
当系统中不存在 DataSource、XADataSource 这两个类时,Springboot 才会通过 @Import 注解帮我们 将 DataSourceConfiguration.Hikari、DataSourceConfiguration.Tomcat.class 等组件注入到 IOC 容器中