天天看點

提升Spingboot啟動速度,減少@Autowired的使用

作者:思慕程式員

1、注解注入分析

首先确定,我們為什麼需要使用 @Autowired 注解?@Autowired 是一個注釋,它可以對類成員變量、方法及構造函數進行标注,讓 spring 完成 bean 自動裝配的工作。對 Spring Bean 這塊不熟悉的,可以看【Spring 源碼分析】這個系列的文章

@RequiredArgsConstructor 是 lombok 提供的注解,作用于類,用于生成包含 final 和 @NonNull 注解的成員變量的構造方法。那麼也就是說,我們需要在注入的屬性上增加 final 或 @NonNull 修飾就可以了

Spring 中三種注入方式、

第一種:Field Injection:屬性注入,這種注入方式通過 Java 的反射機制實作,是以 private 的成員也可以被注入具體的對象

提升Spingboot啟動速度,減少@Autowired的使用

第二種:Constructor Injection 構造注入,通過對象建構的時候建立關系,是以這種方式對對象建立的順序會有要求,當然 Spring 會為你搞定這樣的先後順序,除非你出現循環依賴,然後就會抛出異常

提升Spingboot啟動速度,減少@Autowired的使用

第三種:Setter Injection set 注入,通過調用成員變量的 set 方法來注入想要使用的依賴對象

提升Spingboot啟動速度,減少@Autowired的使用

2、執行個體分析

項目中的@Autowired 注解,有黃色提示,根據提示修改代碼之後,

提升Spingboot啟動速度,減少@Autowired的使用

滑鼠放上去看到提示使用構造方法注入

提升Spingboot啟動速度,減少@Autowired的使用

有兩種形式,第一種,直接建立空構造,實際上是将屬性修改為 final。第二種,每個屬性的注入都在構造方法上增加一個參數,如下

提升Spingboot啟動速度,減少@Autowired的使用

第二種代碼太臃腫了,并且很繁瑣,是以這裡我們使用第一種方式,final 構造,于是代碼變成了以下格式

提升Spingboot啟動速度,減少@Autowired的使用

大量使用@RequiredArgsConstructor(onConstructor_ = @Autowired)

後發現啟動時間明顯快了一半多,

沒有使用這個注解前,啟動時間如圖

提升Spingboot啟動速度,減少@Autowired的使用

使用@RequiredArgsConstructor(onConstructor_ = @Autowired)後

提升Spingboot啟動速度,減少@Autowired的使用

繼續閱讀