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