javascript
springboot thymeleaf 引入jquery_超详细实战:SpringBoot高级之autoconfigure自动化配置
本篇課程分為概念和實(shí)戰(zhàn)內(nèi)容。代碼私信: 005獲取。
通讀全文大概需要五分鐘
不知道用過SpringBoot的同學(xué),有沒有發(fā)現(xiàn)在SpringBoot的maven依賴中經(jīng)常會(huì)有很多的starter之類的依賴,往往這些依賴的框架,在加入到pom之后,當(dāng)應(yīng)用啟動(dòng)時(shí)候就會(huì)自動(dòng)的被應(yīng)用整合起來。比如昨天我們的thymeleaf教程中,SpringBoot在整合thymeleaf的時(shí)候,只是引入了spring-boot-starter-thymeleaf依賴就可以直接使用了,類似的還有很多。
比如: 自動(dòng)整合freemarker
自動(dòng)整合mybatis
現(xiàn)在不懂這些都沒關(guān)系,本節(jié)課小編就教大家如何使用自動(dòng)化配置。
說到自動(dòng)化配置這其實(shí)是SpringBoot的一個(gè)小特性。不知道有沒有同學(xué)仔細(xì)研究過SpringBootApplication這個(gè)注解主要有什么作用。其實(shí)自動(dòng)化配置的秘密就隱藏在這里。
跟著小編來找一下秘密到底在哪里。
秘密就是: EnableAutoConfiguration
這個(gè)類的含義就是自動(dòng)在依賴中找到自動(dòng)化配置類。為了更簡單的給各位小伙伴說清楚。下面
小編舉一個(gè)例子thymeleaf。我們看下thymeleaf是如何實(shí)現(xiàn)自動(dòng)化配置的吧。thymeleaf的自動(dòng)化類就是這個(gè):ThymeleafAutoConfiguration
前面我們說了SpringBoot的自動(dòng)化配置的秘密是EnableAutoConfiguration.。那么我們看ThymeleafAutoConfiguration和EnableAutoConfiguration到底有什么關(guān)系呢?
謎底大解開
SpringBoot項(xiàng)目啟動(dòng)類必須要被EnableAutoConfiguration標(biāo)記,而之所以我們沒有看到是因?yàn)?#xff0c;SpringBootApplication已經(jīng)被EnableAutoConfiguration標(biāo)記了。
那么SpringBoot會(huì)在他依賴的所有包中去查找一個(gè)叫spring.factories的文件,ThymeleafAutoConfiguration和EnableAutoConfiguration的關(guān)系就在spring.factories里面聲明。我們打開
spring.factories文件發(fā)現(xiàn)EnableAutoConfiguration其實(shí)與很多的自動(dòng)化配置做了綁定。當(dāng)EnableAutoConfiguration被加載,其實(shí)與其綁定的這么多自動(dòng)化配置都會(huì)選擇的進(jìn)行啟動(dòng)。
到這里我們就知道了為啥當(dāng)引入了thymeleaf就會(huì)自動(dòng)被整合到SpringBoot中了吧。如果只知道以上這些其實(shí)還是不夠的。下面小編提出一個(gè)問題。
請思考:
SpringBoot中自動(dòng)化配置會(huì)自動(dòng)整合ThymeleafAutoConfiguration但是假如我們不引入thymeleaf它的實(shí)現(xiàn)類,那么自動(dòng)整合時(shí)候就會(huì)報(bào)中NoSuchClassException異常。SpringBoot是如何解決呢?
我們看ThymeleafAutoConfiguration是如何實(shí)現(xiàn)的。
答案就在這些注解上面。
- @ConditionalOnClass : classpath中存在該類時(shí)起效
- @ConditionalOnMissingClass : classpath中不存在該類時(shí)起效
- @ConditionalOnBean : DI容器中存在該類型Bean時(shí)起效
- @ConditionalOnMissingBean : DI容器中不存在該類型Bean時(shí)起效
- @ConditionalOnSingleCandidate : DI容器中該類型Bean只有一個(gè)或@Primary的只有一個(gè)時(shí)起效
- @ConditionalOnExpression : SpEL表達(dá)式結(jié)果為true時(shí)
- @ConditionalOnProperty : 參數(shù)設(shè)置或者值一致時(shí)起效
- @ConditionalOnResource : 指定的文件存在時(shí)起效
- @ConditionalOnJndi : 指定的JNDI存在時(shí)起效
- @ConditionalOnJava : 指定的Java版本存在時(shí)起效
- @ConditionalOnWebApplication : Web應(yīng)用環(huán)境下起效
- @ConditionalOnNotWebApplication : 非Web應(yīng)用環(huán)境下起效
SpringBoot如何來判斷是否啟動(dòng)自動(dòng)化配置,防止報(bào)錯(cuò)呢? 就是通過上面的條件注解來實(shí)現(xiàn)。只要滿足條件的配置類,才會(huì)被整合進(jìn)去。
實(shí)現(xiàn)一個(gè)自動(dòng)化配置項(xiàng)目實(shí)戰(zhàn)?
我們以github上一個(gè)項(xiàng)目為例
使用方法.(和SpringCloud中Hystrix的使用方法類似,當(dāng)getUserName出現(xiàn)報(bào)錯(cuò)之后,就返回其指定的備用方法)
該項(xiàng)目可以自動(dòng)化配置.
我們看他是如何實(shí)現(xiàn)自動(dòng)化配置的吧。
Turnoff的配合類就下面這么簡單。
只用在META-INF目錄中創(chuàng)建一個(gè)spring.factories就可以實(shí)現(xiàn)。是不是很簡單。
到這里本篇內(nèi)容就講完了,相信各位看官已經(jīng)明白了吧。
獲取本課程代碼請關(guān)注頭條號(hào): 軟件編程指南 ,私信: 005
更多了解可以點(diǎn)擊小編博客: https://blog.springlearn.cn/posts/4135/
總結(jié)
以上是生活随笔為你收集整理的springboot thymeleaf 引入jquery_超详细实战:SpringBoot高级之autoconfigure自动化配置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java deque.pop_Java
- 下一篇: 实战干货!Spring Cloud Ga