认识Springboot
SpringBoot不是什么
不是应用服务器
不是JavaEE之类的规范
不是代码生成器
不是Spring Framework的升级版(帮助大家更好地使用Spring Framework)
SpringBoot的特性
方便地创建可独立运行的Spring应用程序
直接内嵌了Tomcat、Jetty、Undertow
简化了项目的构建配置
为Spring及第三方库提供自动配置
提供生产级特性
无需生成代码或进行xml配置
SpringBoot的四大核心部分
自动配置 - Auto Configuration
起步依赖 - Starter Dependency
命令行界面 - Spring Boot CLI
Actuator
了解自动配置
自动配置
基于添加了Jar依赖自动对SpringBoot应用程序进行配置
spring-boot-autoconfiguration
开启自动配置
@EnableAutoConfiguration
exclude = Class<?>[](参考自动配置类的信息)
@SpringBootApplication
自动配置的实现原理
@EnableAutoConfiguration
AutoConfigurationImportSelector(package org.springframework.boot.autoconfigure;)
META-INF/spring.factories(org\springframework\boot\spring-boot-autoconfigure\2.1.5.RELEASE\spring-boot-autoconfigure-2.1.5.RELEASE.jar!\META-INF\spring.factories)
org.springframework.boot.autoconfigure.EnableAutoConfiguration
自动配置的实现原理
条件注解
@Conditional
@ConditionalOnClass //当条件出现什么类的时候生效
@ConditionalOnBean //当容器里存在某个bean的时候生效
@ConfitionalOnMissingBean //当容器里不存在某个bean时生效
@ConditionalOnProperty //当配置了特定属性的时候
例:@ConditionOnProperty(name="xxx.enable",havingValue="true",matchIfMissing="false")
bean条件
@ConditionalOnBean
@ConditionalOnMissingBean
@ConditionalOnSingleCandidate
资源条件
@ConditionOnResource
Web应用条件
@ConditionalOnWebApplication
@ConditionalOnNotWebApplication
其他条件
@ConditionalOnExpression
@ConditionalOnJava
@ConditionalOnJndi
执行顺序
@AutoConfigureBefore
@AutoConfigureAfter
@AutoConfigureOrder
参考org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration
package org.springframework.boot.autoconfigure.jdbc;
/**
* {@link EnableAutoConfiguration Auto-configuration} for {@link DataSource}.
*
* @author Dave Syer
* @author Phillip Webb
* @author Stephane Nicoll
* @author Kazuki Shimizu
*/
@Configuration
@ConditionalOnClass({ DataSource.class, EmbeddedDatabaseType.class }) //当存在这两类的时候
@EnableConfigurationProperties(DataSourceProperties.class)
@Import({ DataSourcePoolMetadataProvidersConfiguration.class,
DataSourceInitializationConfiguration.class })
public class DataSourceAutoConfiguration {
@Configuration
@Conditional(EmbeddedDatabaseCondition.class) //当存在这个类的时候
@ConditionalOnMissingBean({ DataSource.class, XADataSource.class }) //当不存在这两个Bean的时候
@Import(EmbeddedDataSourceConfiguration.class)
protected static class EmbeddedDatabaseConfiguration {
}
}
了解自动配置的情况
命令行添加 --debug
由ConditionEvaluationReportLoggingListeners输出
Positive matches 匹配那些
Negative matches 没有匹配到那些
Exclusions 排除那些
Unconditional classes 无条件配置
-- 摘自极客时间玩转spring全家桶