Spring如何使用@Indexed加快啟動(dòng)速度
使用@Indexed加快啟動(dòng)速度
Spring讀取@Component組件(派生性),有兩種實(shí)現(xiàn)方式,一種是反射,一種是ASM。反射性能低主要是要loadClass,畢竟Class,需要Load,比如掃描”com.dongguabai”需要把所有的類load,效率太慢。
ASM相當(dāng)于直接加載類的資源信息,ReadResource。
Spring5.0 后面又有了@Indexed,可以預(yù)編譯。
會(huì)生成spring.compoments文件:
跟lombok一樣在編譯期處理。
Spring5--@Indexed注解
Spring Framework 5.0作為 Spring Boot 2.0 的底層核心框架,就目前已經(jīng)發(fā)布的版本來(lái)看,相對(duì)于 Spring Framework 4.x 而言,注解驅(qū)動(dòng)的性能提升不是那么明顯。
然而隨著 Spring Framework 注解驅(qū)動(dòng)能能力逐漸受到開(kāi)發(fā)人員的關(guān)注,尤其在 Spring Boot 應(yīng)用場(chǎng)景中,大量使用注解 @CompoentScan 掃描指定的 package,當(dāng)掃描的 package 所包含的類越多時(shí),Spring 模式注解解析的耗時(shí)就越長(zhǎng)。
對(duì)于這個(gè)問(wèn)題,Spring Framework 5.0 版本引入的注解 @Indexed,為 Spring 模式注解添加索引,以提升應(yīng)用啟動(dòng)性能。
舉個(gè)栗子
@Indexed @Configuration public class WebMvcConfig implements WebMvcConfigurer {}
但是,注解 @Indexed 不能孤立地存在,需要在工程 pom.xml 中增加 org.springframework:spring-context-indexer 依賴:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-indexer</artifactId> <optional>true</optional> </dependency>
當(dāng)工程打包為 JAR 或在 IDE 工具中重新構(gòu)建后,METE-INF/spring.components 文件將自動(dòng)生成。
換言之,該文件在編譯時(shí)生成。當(dāng) Spring 應(yīng)用上下文執(zhí)行 @CompoentScan 掃描時(shí),METE-INF/spring.components 將被 CandidateComponentsIndexLoader 讀取并加載,轉(zhuǎn)化為 CandidateComponentsIndex 對(duì)象,進(jìn)而 @CompoentScan 不再掃描指定的 package,而是讀取 CandidateComponentsIndex 對(duì)象,從而達(dá)到提升性能的目的。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot自動(dòng)重啟的簡(jiǎn)單方法
Springboot提供了熱部署的方式,當(dāng)發(fā)現(xiàn)任何類發(fā)生了改變,馬上通過(guò)JVM類加載的方式,加載最新的類到虛擬機(jī)中。這篇文章主要介紹了springboot自動(dòng)重啟的實(shí)現(xiàn)方法,需要的朋友可以參考下2018-04-04Java內(nèi)存結(jié)構(gòu)和數(shù)據(jù)類型
本文重點(diǎn)給大家介紹java內(nèi)存結(jié)構(gòu)和數(shù)據(jù)類型知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2016-12-12基于SpringBoot的Dubbo泛化調(diào)用的實(shí)現(xiàn)代碼
這篇文章主要介紹了基于SpringBoot的Dubbo泛化調(diào)用的實(shí)現(xiàn),從泛化調(diào)用實(shí)現(xiàn)的過(guò)程來(lái)看,我們可以對(duì)自己提供所有服務(wù)進(jìn)行測(cè)試,不需要引入調(diào)用的接口,減少代碼的侵入,需要的朋友可以參考下2022-04-04Java中關(guān)于優(yōu)先隊(duì)列PriorityQueue的使用及相關(guān)方法
這篇文章主要介紹了Java中關(guān)于優(yōu)先隊(duì)列PriorityQueue的使用及相關(guān)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Java中StringBuilder常用構(gòu)造方法解析
這篇文章主要介紹了Java中StringBuilder常用構(gòu)造方法解析,StringBuilder是一個(gè)可標(biāo)的字符串類,我們可以吧它看成是一個(gè)容器這里的可變指的是StringBuilder對(duì)象中的內(nèi)容是可變的,需要的朋友可以參考下2024-01-01Mybatis Plus 代碼生成器的實(shí)現(xiàn)
這篇文章主要介紹了Mybatis Plus 代碼生成器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03SpringBoot中Mybatis注解一對(duì)多和多對(duì)多查詢實(shí)現(xiàn)示例
這篇文章主要介紹了SpringBoot中Mybatis注解一對(duì)多和多對(duì)多查詢的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03詳解mybatis插入數(shù)據(jù)后返回自增主鍵ID的問(wèn)題
這篇文章主要介紹了mybatis插入數(shù)據(jù)后返回自增主鍵ID詳解,本文通過(guò)場(chǎng)景分析示例代碼相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-07-07

Java使用正則表達(dá)式檢索、替換String中特定字符和正則表達(dá)式的一切