亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

在springboot中實(shí)現(xiàn)個(gè)別bean懶加載的操作

 更新時(shí)間:2020年10月19日 09:07:48   作者:會(huì)遲到但不會(huì)缺席  
這篇文章主要介紹了在springboot中實(shí)現(xiàn)個(gè)別bean懶加載的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

懶加載---就是我們?cè)趕pring容器啟動(dòng)的是先不把所有的bean都加載到spring的容器中去,而是在當(dāng)需要用的時(shí)候,才把這個(gè)對(duì)象實(shí)例化到容器中。

@Lazy

在需要懶加載的bean上加上@Lazy就可以了

補(bǔ)充知識(shí):springboot組件懶加載的坑及加載規(guī)則

什么是懶加載?

懶加載的意思是不在項(xiàng)目啟動(dòng)的時(shí)候?qū)嵗鰜?lái)這個(gè)組件

@RestController
public class ApiController {
  @Autowired
  Skill kobSkillImpl;
  @RequestMapping("/getRust")
  public String test(){
    kobSkillImpl.print();
    return "Welcome Rust's experience";
  }
}

首先這是個(gè)api的代碼

@RestController
public class ApiController {
  @Autowired
  Skill kobSkillImpl;
  @RequestMapping("/getRust")
  public String test(){
    kobSkillImpl.print();
    return "Welcome Rust's experience";
  }
}

下面是服務(wù)的代碼,我們構(gòu)造函數(shù)輸出一段內(nèi)容以便我們知道它是什么時(shí)候加載的,我們使用了@lazy注解,標(biāo)記且啟動(dòng)懶加載

@Service
@Lazy
public class KoaSkillImpl implements Skill {
  KoaSkillImpl(){
    System.out.println("Load KoaSkill Impl");
  }
  @Override
  public void print() {
    System.out.println("I can KOA.js");
  }
}

在這里就能看到,在項(xiàng)目啟動(dòng)的時(shí)候,這個(gè)z組件就已經(jīng)開(kāi)始初始化了,這個(gè)說(shuō)明什么?這個(gè)說(shuō)明@lazy這個(gè)注解在現(xiàn)在是無(wú)效的。那么解決的方案是什么?

解決方案是在api層也要加個(gè)@lazy,也就是說(shuō)被調(diào)用方是懶加載,但是調(diào)用方不是懶加載,最終還不會(huì)執(zhí)行懶加載。

我們?cè)赼pi層也加個(gè)@lazy,執(zhí)行項(xiàng)目發(fā)現(xiàn)沒(méi)有初始化輸出的內(nèi)容了。

那么,在懶加載的作用下,什么時(shí)候會(huì)初始化?

我們請(qǐng)求一下api的接口,發(fā)現(xiàn)控制臺(tái)已經(jīng)產(chǎn)生輸出,并且對(duì)這個(gè)類進(jìn)行了實(shí)例化,也就是說(shuō)懶加載只在使用的時(shí)候進(jìn)行加載,項(xiàng)目啟動(dòng)的時(shí)候不會(huì)對(duì)類實(shí)例化。

2.關(guān)于對(duì)service多實(shí)現(xiàn)類進(jìn)行加載

@Service
public class JavaSkillImpl implements Skill {
  @Override
  public void print() {
    System.out.println("I Can Java");
  }
}
@Service
@Lazy
public class KoaSkillImpl implements Skill {
  KoaSkillImpl(){
    System.out.println("Load KoaSkill Impl");
  }
  @Override
  public void print() {
    System.out.println("I can KOA.js");
  }
}
@Service
public class PythonSkillImpl implements Skill {
  @Override
  public void print() {
    System.out.println("I can Python");
  }
}
@RestController
@Lazy
public class ApiController {
  @Autowired
  Skill koaSkillImpl;
  @RequestMapping("/getRust")
  public String test(){
    koaSkillImpl.print();
    return "Welcome Rust's experience";
  }
}

例子中有三個(gè)類,類都實(shí)現(xiàn)了ISkill接口,

api中用的是KoaSkillImpl,那么我命名成KobSkillImpl行不行?

當(dāng)我們這樣運(yùn)行時(shí),項(xiàng)目啟動(dòng)加載的時(shí)候是會(huì)報(bào)錯(cuò)了,其實(shí)服務(wù)名稱是對(duì)不上,那么解決方法

1.就是將這個(gè)命名改成類名的駝峰

2.就是在@service注解上加@service(“kobSkillImpl”)

3.我們看下@autowired其實(shí)是對(duì)Api的注入是不?我們有兩個(gè)主流的注入方法,一個(gè)是setter注入,一個(gè)是構(gòu)造函數(shù)注入不是?那我們就可以使用構(gòu)造函數(shù)注入的方式對(duì)api注入,取代@Autowired這個(gè)注解

@RestController
@Lazy
public class ApiController {

  Skill javaSkillImpl;
  ApiController(Skill javaSkillImpl){
    this.javaSkillImpl=javaSkillImpl;
  }


  @RequestMapping("/getRust")
  public String test(){
    javaSkillImpl.print();
    return "Welcome Rust's experience";
  }
}

以上這篇在springboot中實(shí)現(xiàn)個(gè)別bean懶加載的操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java if-else 多重嵌套的優(yōu)化方式

    Java if-else 多重嵌套的優(yōu)化方式

    這篇文章主要介紹了Java if-else 多重嵌套的優(yōu)化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • java實(shí)現(xiàn)時(shí)鐘效果

    java實(shí)現(xiàn)時(shí)鐘效果

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)時(shí)鐘效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Springcloud?feign傳日期類型參數(shù)報(bào)錯(cuò)的解決方案

    Springcloud?feign傳日期類型參數(shù)報(bào)錯(cuò)的解決方案

    這篇文章主要介紹了Springcloud?feign傳日期類型參數(shù)報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java開(kāi)發(fā)崗位面試被問(wèn)到泛型怎么辦

    Java開(kāi)發(fā)崗位面試被問(wèn)到泛型怎么辦

    泛型在java中有很重要的地位,在面向?qū)ο缶幊碳案鞣N設(shè)計(jì)模式中有非常廣泛的應(yīng)用。java泛型知識(shí)點(diǎn)也是Java開(kāi)發(fā)崗位必問(wèn)的一個(gè)話題,今天小編就給大家普及下Java泛型常見(jiàn)面試題,感興趣的朋友一起看看吧
    2021-07-07
  • Java實(shí)現(xiàn)走迷宮回溯算法

    Java實(shí)現(xiàn)走迷宮回溯算法

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)走迷宮回溯算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 參數(shù)校驗(yàn)Spring的@Valid注解用法解析

    參數(shù)校驗(yàn)Spring的@Valid注解用法解析

    這篇文章主要介紹了參數(shù)校驗(yàn)Spring的@Valid注解用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot使用攔截器Interceptor實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn)

    SpringBoot使用攔截器Interceptor實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn)

    角色權(quán)限校驗(yàn),是保證接口安全必備的能力:有權(quán)限才可以操作,所以,一般對(duì)于這種通用邏輯,推薦不與主業(yè)務(wù)邏輯耦合,那么怎么來(lái)解耦,那么本文小編就給大家詳細(xì)講解如何使用攔截器Interceptor實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn),需要的朋友可以參考下
    2023-07-07
  • Java回調(diào)函數(shù)原理實(shí)例與代理模式的區(qū)別講解

    Java回調(diào)函數(shù)原理實(shí)例與代理模式的區(qū)別講解

    今天小編就為大家分享一篇關(guān)于Java回調(diào)函數(shù)原理實(shí)例與代理模式的區(qū)別講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • Java?SE使用for?each循環(huán)遍歷數(shù)組的方法代碼

    Java?SE使用for?each循環(huán)遍歷數(shù)組的方法代碼

    在Java?SE開(kāi)發(fā)中,數(shù)組是最常見(jiàn)的數(shù)據(jù)結(jié)構(gòu)之一,Java提供了多種遍歷數(shù)組的方式,其中for循環(huán)是最常用的方式之一,本文將介紹如何使用for?each循環(huán)遍歷數(shù)組,接下來(lái),我們將通過(guò)一個(gè)簡(jiǎn)單的代碼示例來(lái)展示如何使用for?each循環(huán)遍歷數(shù)組,需要的朋友可以參考下
    2023-11-11
  • springboot單元測(cè)試依賴踩坑記錄

    springboot單元測(cè)試依賴踩坑記錄

    這篇文章主要介紹了springboot單元測(cè)試依賴踩坑記錄及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03

最新評(píng)論