<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。
在Spring框架這個大家族中,產生了很多衍生框架,比如 Spring、SpringMvc框架等,Spring的核心內容在於控制反轉(IOC)和依賴注入(DI),所謂控制反轉並非是一種技術,而是一種思想,在操作方面是指在spring組態檔中建立<bean>,依賴注入即為由spring容器為應用程式的某個物件提供資源,比如 參照物件、常數資料等。
在Spring框架這個大家族中,產生了很多衍生框架,比如 Spring、SpringMvc框架等,Spring的核心內容在於控制反轉(IOC)和依賴注入(DI),所謂控制反轉並非是一種技術,而是一種思想,在操作方面是指在spring組態檔中建立<bean>,依賴注入即為由spring容器為應用程式的某個物件提供資源,比如 參照物件、常數資料等。
SpringBoot最明顯的特點是,讓檔案設定變的相當簡單、讓應用部署變的簡單(SpringBoot內建伺服器,並裝備啟動類程式碼),可以快速開啟一個Web容器進行開發。
Spring Boot的啟動類上有一個@SpringBootApplication註解,這個註解是Spring Boot專案必不可少的註解。
作用:SpringBoot的核心註解,標註在某個類上說明這個類是SpringBoot的主設定類 , SpringBoot就應該執行這個類的main方法來啟動SpringBoot應用
@SpringBootApplication public class Springboot01Application { public static void main(String[] args) { SpringApplication.run(Springboot01Application.class, args); } }
它的本質是一個組合註解,我們點進去檢視該類的元資訊主要包含3個註解:
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} )
作用:SpringBoot的設定類 ,標註在某個類上 , 表示這是一個SpringBoot的設定類;我們繼續進去這個註解檢視原始碼:
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Configuration @Indexed public @interface SpringBootConfiguration { @AliasFor( annotation = Configuration.class ) boolean proxyBeanMethods() default true; }
@Configuration標註在某個類上,表示這是一個 springboot的設定類。可以向容器中注入元件。
作用:開啟自動設定功能
以前我們需要設定的東西,Spring Boot幫我們自動設定;@EnableAutoConfiguration告訴SpringBoot開啟自動設定功能;這樣自動設定才能生效;
點進註解接續檢視:
@AutoConfigurationPackage @Import({AutoConfigurationImportSelector.class}) public @interface EnableAutoConfiguration {
@AutoConfigurationPackage:自動設定包
@Import({AutoConfigurationImportSelector.class}):Spring底層註解@import , 給容器中匯入一個元件,匯入的元件由AutoConfigurationPackages.Registrar.class這個類來指定
①利用getAutoConfigurationEntry(annotationMetadata);給容器中批次匯入一些元件;
②呼叫List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)獲取到所有需要匯入到容器中的設定類;
③利用工廠載入 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的元件;
④從META-INF/spring.factories位置來載入一個檔案。預設掃描我們當前系統裡面所有META-INF/spring.factories位置的檔案。
作用:自動掃描元件,預設掃描該類所在包及其子包下所有帶有指定註解的類,將它們自動裝配到bean容器中,會被自動裝配的註解包括@Controller、@Service、@Component、@Repository等。也可以指定掃描路徑。
簡單來說,Spring Boot通過@EnableAutoConfiguration註解開啟自動設定,對jar包下的spring.factories檔案進行掃描,這個檔案中包含了可以進行自動設定的類,當滿足@Condition註解指定的條件時,便在依賴的支援下進行範例化,註冊到Spring容器中。
在載入自動設定類的時候,並不是將spring.factories的設定全部載入進來,而是通過@Conditional等註解的判斷進行動態載入;
@Conditional其實是spring底層註解,意思就是根據不同的條件,來進行自己不同的條件判斷,如果滿足指定的條件,那麼設定類裡邊的設定才會生效;
常用的Conditional註解:
@ConditionalOnClass : classpath中存在該類時起效
@ConditionalOnMissingClass : classpath中不存在該類時起效
@ConditionalOnBean : DI容器中存在該型別Bean時起效
@ConditionalOnMissingBean : DI容器中不存在該型別Bean時起效
@ConditionalOnSingleCandidate : DI容器中該型別Bean只有一個或@Primary的只有一個時起效
@ConditionalOnExpression : SpEL表示式結果為true時
@ConditionalOnProperty : 引數設定或者值一致時起效
@ConditionalOnResource : 指定的檔案存在時起效
@ConditionalOnJndi : 指定的JNDI存在時起效
@ConditionalOnJava : 指定的Java版本存在時起效
@ConditionalOnWebApplication : Web應用環境下起效
@ConditionalOnNotWebApplication : 非Web應用環境下起效
到此這篇關於SpringBoot自動設定特點與原理詳細分析的文章就介紹到這了,更多相關SpringBoot自動設定內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45