SpringBoot項目速度提升之延遲初始化(LazyInitialization)詳解_第1頁
SpringBoot項目速度提升之延遲初始化(LazyInitialization)詳解_第2頁
SpringBoot項目速度提升之延遲初始化(LazyInitialization)詳解_第3頁
SpringBoot項目速度提升之延遲初始化(LazyInitialization)詳解_第4頁
SpringBoot項目速度提升之延遲初始化(LazyInitialization)詳解_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第SpringBoot項目速度提升之延遲初始化(LazyInitialization)詳解目錄前言是什么?有啥用?如何實現?全局懶加載注意的點總結

前言

在一個名為種花家的小鎮上,生活著一群熱愛編程的人。他們致力于構建出高效、可維護的軟件系統,而SpringBoot框架成為了他們的不二之選。這個小鎮上的人們每天都在用SpringBoot框架創造著令人矚目的應用程序。

然而,隨著時間的推移,他們的應用程序變得越來越龐大,包含了許多不同的模塊和組件。在應用程序啟動的時候,所有的bean都會被一次性初始化,這導致了一個令人頭疼的問題:啟動時間變得越來越長了。

小鎮的居民們開始感到困擾。他們意識到,無論是在開發環境還是在生產環境中,啟動時間的長短都直接關系到他們的工作效率和用戶體驗。于是,他們尋找一種解決方案,希望能夠在保證應用程序正常運行的同時,減少啟動時間的開銷。

正當大家糾結不已時,一個編程少俠出現了。他名叫不一樣的科技宅,他告訴大家,有一種叫做延遲初始化的策略,可以幫助他們解決這個問題。

據說,延遲初始化能夠將bean的初始化推遲到第一次使用時進行,而不是在應用程序啟動時立即初始化。這樣一來,只有當某個bean真正被需要時,才會進行初始化,避免了不必要的資源消耗和時間開銷。

是什么?

延遲初始化(LazyInitialization)是一種在需要時才創建或加載對象的策略,以減少啟動時間和資源消耗。在Spring中,延遲初始化允許將Bean的創建推遲到第一次訪問該Bean時才進行,而不是在應用程序啟動時立即創建。

有啥用?

節省資源

當應用程序中存在大量的bean時,立即初始化所有bean可能會占用大量的內存和處理時間。通過延遲初始化,只有在需要使用bean時才會進行初始化,可以避免不必要的資源消耗。

加快啟動時間

延遲初始化可以減少應用程序啟動時間,因為只有在需要時才會加載和初始化bean。對于那些在應用程序啟動時可能不會使用的較大或復雜的bean,延遲初始化可以顯著加快啟動時間。

解決循環依賴

Spring容器可以管理bean之間的依賴關系。當存在循環依賴時,延遲初始化可以幫助解決這個問題。通過延遲初始化,Spring容器可以在運行時逐個解析和滿足bean之間的依賴,而不是在初始化階段發現無法解決的循環依賴。

如何實現?

SpringBoot中實現延遲初始化Bean,可以采取以下四種方法:

1.對于使用注解配置的Bean,可以在Bean的定義上使用@Lazy注解來實現延遲初始化。

示例:

@Lazy

@Component

publicclassMyBean{

//Bean的定義

}

2.對于使用Java配置類的方式,可以在@Bean注解上使用@Lazy注解,以實現延遲初始化。

示例:

@Configuration

publicclassAppConfig{

@Lazy

@Bean

publicMyBeanmyBean(){

//Bean的定義

returnnewMyBean();

}

3.對于XML配置的Bean,可以在bean元素上設置lazy-init屬性為true,以實現延遲初始化。

示例:

beanid="myBean"lazy-init="true"/

4.對于使用@ComponentScan注解,可以配置屬性lazyInit=true實現某些包下面所有的bean延遲初始化。

示例:

packagecom.example.demo.bean;

importorg.springframework.stereotype.Component;

@Component

publicclassMyBean{

publicMyBean(){

System.out.println("Mybeaninitsuccess.");

}

@SpringBootApplication

@ComponentScan(value="com.example.demo.bean",lazyInit=true)

publicclassDemoApplication{

publicstaticvoidmain(String[]args){

SpringApplication.run(DemoApplication.class,args);

}

全局懶加載

上面演示案例,意味著我們只能對自己實現的bean進配置。但是項目中肯定會引入很多第三方的starter,比如redis,mq。如果想對引入的第三方庫進行配置,那就不太容易了,所以我們可以開啟全局懶加載。

配置文件增加下面的配置:

spring:

main:

lazy-initialization:true#默認false關閉

開啟了全局懶加載,想要過濾某個bean,可以通過設置@Lazy(false)排除。

@Component

@Lazy(false)

publicclassMyBean{

publicMyBean(){

System.out.println("Mybeaninitsuccess.");

}

還有一種是通過配置LazyInitializationExcludeFilter規則實現排除。

@Configuration

publicclassAppConfig{

@Bean

LazyInitializationExcludeFilterintegrationLazyInitExcludeFilter(){

returnLazyInitializationExcludeFilter.forBeanTypes(MyBean.class);

}

注意的點

@Lazy注解的使用

要確保在正確的位置使用@Lazy注解。通常情況下,將其添加在Bean的定義上,例如@Component、@Service、@Repository等注解上。這樣可以確保被標記的Bean在第一次使用時才會進行初始化。

依賴關系的處理

懶加載的Bean可能會被其他Bean所依賴。在處理依賴關系時,要確保依賴的Bean已經被初始化或者也進行了懶加載。否則,可能會導致依賴注入失敗或出現異常。

延遲初始化帶來的影響

懶加載雖然可以提高應用的啟動性能,但也會帶來一些影響。由于Bean的初始化被延遲到第一次使用,因此在初始化時可能會出現較長的延遲,對于需要立即使用的Bean可能會造成一定的等待時間。

內存消耗的控制

懶加載雖然可以減少應用啟動時的內存消耗,但也需要注意對內存的控制。如果應用中存在大量的懶加載Bean,并且這些Bean在實際使用中并不頻繁,可能會導致過多的內存占用。因此,需要根據應用的具體情況,合理使用懶加載,避免過度消耗內存。

運行時異常的處理

由于懶加載將Bean的初始化延遲到運行時,因此在初始化過程中可能會發生異常。要確保適當地處理這些異常,以防止應用的崩潰或不可預料的行為。

總結

懶加載是一種延遲加載的技術,用于在需要時才加載資源,而不是在應用啟動時加載所有資源。在SpringBoot框架中,有兩種

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論