欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring中@Lazy注解的使用技巧與實(shí)例解析

 更新時(shí)間:2025年03月01日 11:52:54   作者:t0_54manong  
@Lazy注解在Spring框架中用于延遲Bean的初始化,優(yōu)化應(yīng)用啟動(dòng)性能,它不僅適用于@Bean和@Component,還可以用于注入點(diǎn),通過(guò)將Bean的初始化延遲到第一次使用時(shí),可以減少不必要的資源消耗,本文介紹Spring中@Lazy注解的使用技巧與實(shí)例解析,感興趣的朋友一起看看吧

在Spring框架中,@Lazy注解是一個(gè)非常實(shí)用的功能,它可以幫助我們延遲Bean的初始化時(shí)間,從而優(yōu)化應(yīng)用的啟動(dòng)性能。從Spring 4.0.0開(kāi)始,@Lazy不僅可以應(yīng)用于@Bean@Component,還可以直接作用于注入點(diǎn)(如@Autowired、@Inject@Resource)。這意味著我們可以更靈活地控制Bean的初始化時(shí)機(jī),避免不必要的資源消耗。

一、@Lazy注解的作用

(一)延遲Bean的初始化

在Spring中,默認(rèn)情況下,所有的Bean在容器啟動(dòng)時(shí)都會(huì)被初始化。然而,有些Bean可能并不需要在啟動(dòng)時(shí)立即加載,而是可以在需要時(shí)才進(jìn)行初始化。@Lazy注解正是為了解決這個(gè)問(wèn)題而設(shè)計(jì)的。它可以將Bean的初始化延遲到第一次被使用時(shí),從而減少應(yīng)用啟動(dòng)時(shí)的資源消耗。

(二)與@Autowired結(jié)合使用

當(dāng)@Lazy@Autowired一起使用時(shí),它會(huì)延遲依賴Bean的初始化,直到依賴被實(shí)際調(diào)用。這種用法在處理復(fù)雜的依賴關(guān)系時(shí)非常有用,可以避免不必要的初始化開(kāi)銷。

二、實(shí)例解析

為了更好地理解@Lazy的作用,我們通過(guò)一個(gè)簡(jiǎn)單的Spring項(xiàng)目來(lái)展示其效果。

(一)代碼示例

1. 普通初始化的Bean

package com.logicbig.example;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
public class MyEagerBean {
    @Autowired
    @Lazy
    private MyLazyBean myLazyBean;
    @PostConstruct
    public void init() {
        System.out.println(getClass().getSimpleName() + " has been initialized");
    }
    public void doSomethingWithLazyBean() {
        System.out.println("Using lazy bean");
        myLazyBean.doSomething();
    }
}

2. 延遲初始化的Bean

public class MyLazyBean {
    @PostConstruct
    public void init() {
        System.out.println(getClass().getSimpleName() + " has been initialized");
    }
    public void doSomething() {
        System.out.println("inside lazy bean doSomething()");
    }
}

3. 主類

public class LazyExampleMain {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);
        System.out.println("--- container initialized ---");
        MyEagerBean bean = context.getBean(MyEagerBean.class);
        System.out.println("MyEagerBean retrieved from bean factory");
        bean.doSomethingWithLazyBean();
    }
}

(二)運(yùn)行結(jié)果

當(dāng)運(yùn)行上述代碼時(shí),輸出如下:

MyEagerBean has been initialized
--- container initialized ---
MyEagerBean retrieved from bean factory
Using lazy bean
MyLazyBean has been initialized
inside lazy bean doSomething()

從輸出中可以看到,MyLazyBean的初始化被延遲到了MyEagerBean調(diào)用doSomethingWithLazyBean()方法時(shí)。

(三)對(duì)比測(cè)試

如果我們將@Lazy注解從MyEagerBean中移除,即:

public class MyEagerBean {
    @Autowired
    //@Lazy
    private MyLazyBean myLazyBean;
    ...
}

運(yùn)行結(jié)果會(huì)變成:

MyLazyBean has been initialized
MyEagerBean has been initialized
--- container initialized ---
MyEagerBean retrieved from bean factory
Using lazy bean
inside lazy bean doSomething()

此時(shí),MyLazyBean會(huì)在容器啟動(dòng)時(shí)被初始化,而不是延遲到第一次使用時(shí)。

三、@Lazy的工作原理

當(dāng)@Lazy注解被應(yīng)用于注入點(diǎn)時(shí),Spring會(huì)為該注入點(diǎn)創(chuàng)建一個(gè)延遲解析的代理對(duì)象,而不是直接初始化目標(biāo)Bean。只有當(dāng)該Bean被實(shí)際調(diào)用時(shí),Spring才會(huì)真正初始化它。

四、總結(jié)

@Lazy注解是Spring框架中一個(gè)非常實(shí)用的功能,它可以幫助我們延遲Bean的初始化,從而優(yōu)化應(yīng)用的啟動(dòng)性能。通過(guò)與@Autowired等注解結(jié)合使用,我們可以在需要時(shí)才加載Bean,避免不必要的資源消耗。在實(shí)際開(kāi)發(fā)中,合理使用@Lazy可以顯著提升應(yīng)用的性能和可維護(hù)性。

到此這篇關(guān)于Spring中@Lazy注解的使用技巧與實(shí)例解析的文章就介紹到這了,更多相關(guān)Spring @Lazy注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot集成規(guī)則引擎Drools方式

    Springboot集成規(guī)則引擎Drools方式

    這篇文章主要介紹了Springboot集成規(guī)則引擎Drools方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • POI通用導(dǎo)出Excel(.xls,.xlsx)的方法

    POI通用導(dǎo)出Excel(.xls,.xlsx)的方法

    這篇文章主要介紹了POI通用導(dǎo)出Excel(.xls,.xlsx)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • java基于TCP協(xié)議實(shí)現(xiàn)聊天程序

    java基于TCP協(xié)議實(shí)現(xiàn)聊天程序

    這篇文章主要為大家詳細(xì)介紹了java基于TCP協(xié)議實(shí)現(xiàn)聊天程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 從log4j2到Disruptor詳解

    從log4j2到Disruptor詳解

    這篇文章主要介紹了從log4j2到Disruptor詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中控制流程語(yǔ)句的深入講解

    Java中控制流程語(yǔ)句的深入講解

    流程控制語(yǔ)句顧名思義就是控制程序走向的語(yǔ)句,其中包括條件語(yǔ)句,分支語(yǔ)句和循環(huán)語(yǔ)句,這篇文章主要給大家介紹了關(guān)于Java中控制流程語(yǔ)句的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • SpringBoot項(xiàng)目jar和war打包部署方式詳解

    SpringBoot項(xiàng)目jar和war打包部署方式詳解

    這篇文章主要為大家介紹了SpringBoot項(xiàng)目jar和war打包部署方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • SpringCloud OpenFeign使用詳解

    SpringCloud OpenFeign使用詳解

    在springcloud微服務(wù)生態(tài)體系下,作為服務(wù)之間相互調(diào)用的重要組件openfeign,在其中承擔(dān)著非常重要的作用,本篇以springcloud中提供的遠(yuǎn)程接口調(diào)用組件openfeign為例,來(lái)聊聊openfeign的詳細(xì)使用,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • SpringBoot2整合JTA組件實(shí)現(xiàn)多數(shù)據(jù)源事務(wù)管理

    SpringBoot2整合JTA組件實(shí)現(xiàn)多數(shù)據(jù)源事務(wù)管理

    這篇文章主要介紹了SpringBoot2整合JTA組件實(shí)現(xiàn)多數(shù)據(jù)源事務(wù)管理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 使用Java計(jì)算集合中的組內(nèi)平均值的代碼實(shí)現(xiàn)

    使用Java計(jì)算集合中的組內(nèi)平均值的代碼實(shí)現(xiàn)

    在Java開(kāi)發(fā)中,集合(Collection)是一個(gè)重要的數(shù)據(jù)結(jié)構(gòu),廣泛應(yīng)用于各種場(chǎng)景,計(jì)算集合中的組內(nèi)平均值是一個(gè)常見(jiàn)的操作,本文將深入探討如何使用Java來(lái)計(jì)算集合中的組內(nèi)平均值,涵蓋基本概念、具體實(shí)現(xiàn)、優(yōu)化策略和實(shí)用示例,需要的朋友可以參考下
    2024-06-06
  • MQ的消息模型及在工作上應(yīng)用場(chǎng)景

    MQ的消息模型及在工作上應(yīng)用場(chǎng)景

    這篇文章主要介紹了MQ的消息模型及在工作上應(yīng)用場(chǎng)景,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05

最新評(píng)論