日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

如何替換重構(gòu)依賴?yán)锩娴腟ervice

作者:抓蛙師 更新時間: 2022-07-10 編程語言

如何替換重構(gòu)依賴?yán)锩娴腟ervice

    • 以下知識來源于瘋狂的獅子Li在QQ群的講解,純屬做一下筆記。
    • 總結(jié)的經(jīng)驗(yàn)

以下知識來源于瘋狂的獅子Li在QQ群的講解,純屬做一下筆記。

由于knife4j停止更新,未來將無法適配springboot3.0,所以Li研究springdoc配合apifox替換掉knife4j,
在過程中,發(fā)現(xiàn)控制器的名稱和描述還是需要通過增加注解@Tag(name = “xxx處理”, description = “xxx描述”)才能顯示,為了徹底去除注解,實(shí)現(xiàn)0侵入的api文檔方案,遂需要對springdoc進(jìn)行相應(yīng)的改造。

在SwaggerConfig中
增加了如下代碼

 /**
     * 自定義 openapi 處理器
     */
    @Bean
    public OpenAPIService openApiBuilder(Optional<OpenAPI> openAPI,
                                         SecurityService securityParser,
                                         SpringDocConfigProperties springDocConfigProperties, PropertyResolverUtils propertyResolverUtils,
                                         Optional<List<OpenApiBuilderCustomizer>> openApiBuilderCustomisers,
                                         Optional<List<ServerBaseUrlCustomizer>> serverBaseUrlCustomisers, Optional<JavadocProvider> javadocProvider) {
        return new OpenApiHandler(openAPI, securityParser, springDocConfigProperties, propertyResolverUtils, openApiBuilderCustomisers, serverBaseUrlCustomisers, javadocProvider);
    }

然后聲明了OpenApiHandler extends OpenAPIService來重構(gòu)OpenAPIService,為什么可以如此重構(gòu)呢?首先在右側(cè)maven管理中,找到springdoc所在的包ruoyi-common,全部選中,并下載源碼。
下載springdoc源碼
然后點(diǎn)擊OpenAPIService進(jìn)入了public class OpenAPIService implements ApplicationContextAware,
再點(diǎn)擊OpenAPIService,即可彈窗看到調(diào)用了此服務(wù)的相關(guān)類,
查看調(diào)用的相關(guān)類
在里面找到new OpenAPIService的地方,點(diǎn)擊進(jìn)去。就可以看到如下方法
生成OpenAPIService的關(guān)鍵方法
可以看到,此方法有三個注解:
@Bean
@ConditionalOnMissingBean
@Lazy(false)
其中,
@Bean表示方法產(chǎn)生一個由Spring管理的bean,
@ConditionalOnMissingBean,它是修飾bean的一個注解,主要實(shí)現(xiàn)的是,當(dāng)你的bean被注冊之后,如果而注冊相同類型的bean,就不會成功,它會保證你的bean只有一個,即你的實(shí)例只有一個,當(dāng)你注冊多個相同的bean時,會出現(xiàn)異常,以此來告訴人員。
@Lazy(false)SpringIoC容器會在啟動的時候?qū)嵗袉螌?shí)例 bean 。如果我們想要實(shí)現(xiàn) Spring 在啟動的時候延遲加載 bean,即在首次調(diào)用bean的時候再去執(zhí)行初始化,就可以使用 @Lazy 注解來解決這個問題。而加了(false)說明沒有使用懶加載

關(guān)鍵的地方就在于@ConditionalOnMissingBean,說明可以通過自己注冊一個Bean來替換掉這個方法,因此才有了開始的在SwaggerConfig中增加的那段代碼。
如果源碼中沒有@ConditionalOnMissingBean,我們還可以直接在開頭那段代碼增加一個注解:@Primary(強(qiáng)制替換),也能達(dá)到目的。繼而可以在OpenApiHandler 覆寫相關(guān)方法。OpenApiHandler 中模仿OpenAPIService的結(jié)構(gòu),并找到讀取控制器@Tag部分的代碼,轉(zhuǎn)為讀取注釋來達(dá)到無需寫@Tag注解的目的。

總結(jié)的經(jīng)驗(yàn)

多讀spring源碼,讀源碼前,先學(xué)習(xí)設(shè)計(jì)模式,多看別人分析源碼的文章,然后自己在maven管理中,下載源碼下載源碼
譬如要找到注解的切面方法,就通過下載源碼后,點(diǎn)擊注解,找到xxx.class.getName() 就可以找到切面實(shí)現(xiàn)進(jìn)而分析注解的作用。

原文鏈接:https://blog.csdn.net/leoisaking/article/details/125687251

欄目分類
最近更新