springboot有什么好處/特性?
容易上手,提升開發效率,為 Spring 開發提供一個更快、更簡單的開發框架。
開箱即用,遠離繁瑣的配置。
2.springboot主要實現思想?
約定大約配置配置;
自動裝配;
約定大約配置配置
主要體現:
1.maven文件結構約定;
2.springboot 默認文件以及配置文件中屬性的配置;
3.對于springmvc的依賴,自動依賴內置tomcat容器;
4.starter組件自動裝配
springboot自動裝配原理?
由于@SpringBootApplication中默認實現了@EnableAutoConfiguration
而@EnableAutoConfiguration中引入了AutoConfigurationImportSelector
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
重點關注下selectImports 會
讀取配置過濾信息
根據 META-INF/spring-autoconfigure-metadata.properties下的文件下的條件選擇加載對應的配置bean
例如:
其中一條記錄:
org.springframework.boot.actuate.autoconfigure.mongo.MongoHealthContributorAutoConfiguration.ConditionalOnClass=org.springframework.data.mongodb.core.MongoTemplate
即:只有當存在MongoTemplate類時,才會自動裝在。
以下為MongoHealthContributorAutoConfiguration與我們日常通過@configuration定義bean一致,也是通過@Bean方式引入.
MongoHealthContributorAutoConfiguration
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(MongoTemplate.class)
@ConditionalOnBean(MongoTemplate.class)
@ConditionalOnEnabledHealthIndicator("mongo")
@AutoConfigureAfter({ MongoAutoConfiguration.class, MongoDataAutoConfiguration.class,
MongoReactiveHealthContributorAutoConfiguration.class })
public class MongoHealthContributorAutoConfiguration
extends CompositeHealthContributorConfiguration<MongoHealthIndicator, MongoTemplate> {
@Bean
@ConditionalOnMissingBean(name = { "mongoHealthIndicator", "mongoHealthContributor" })
public HealthContributor mongoHealthContributor(Map<String, MongoTemplate> mongoTemplates) {
return createContributor(mongoTemplates);
}
}
加載bean 讀取每個starter下的META-INF/spring.factories
此文件內容位接口=實現類
最后講讀取到的bean信息,根據讀到的過濾信息進行過濾,selectImports返回加載到的configclass名稱。