認識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全家桶