最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring的同一個服務(wù)會加載多次的問題分析及解決方法

 更新時間:2022年10月16日 08:56:46   作者:時鐘在說話  
這篇文章主要介紹了Spring的同一個服務(wù)為什么會加載多次,我們先來梳理一下?Web?容器中如何加載?Bean,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

問題現(xiàn)象

最近在本地調(diào)試公司的一個Web項目時,無意中發(fā)現(xiàn)日志中出現(xiàn)了兩次同一個服務(wù)的init記錄,項目都是基于Spring來搭建的,按理說服務(wù)都是單例的,應(yīng)該只有一次服務(wù)加載日志才對,本著對工作認(rèn)真負(fù)責(zé)(閑來無事)的態(tài)度,必然要一探究竟。

問題分析

為什么同一個 Bean 會被容器初始化兩次?

首先,我們先來梳理一下 Web 容器中如何加載 Bean:

在 Web 容器中,ContextLoaderListenerDispatchServlet 都會在容器啟動的時候加載
Bean,區(qū)別在于 DispatchServlet 一般會加載 MVC 相關(guān)的 Bean,ContextLoaderListener
會加載 Spring 相關(guān)的 Bean,二者會分別生成一個WebApplicationContext。

根據(jù) web.xml 的加載順序,listener 會先于 Servlet 加載,當(dāng)獲取 Bean 時,會優(yōu)先從
DispatchServlet 生成的 WebApplicationContext 中查找,如果找不到再從ContextLoaderListener 生成的 WebApplicationContext 中查找。

那么如果這兩個加載了同樣的Bean,到底該用誰的呢?

如果二者的配置文件中定義了相同的 Bean,則實際使用中只會用到 DispatchServlet 中的
Bean,ContextLoaderListener 中的 Bean 無法調(diào)用,造成內(nèi)存泄漏。

接下來我們看一下項目中的 web.xml 配置,如下圖所示,ContextLoaderListener
DispatchServlet加載了相同的配置 spring.xml,所以會出現(xiàn)兩次 Bean 的初始化現(xiàn)象。

解決方案

經(jīng)過上面的分析,我們知道了,之所以同一個Bean會被加載兩次,是由于我們在DispatchServletContextLoaderListener都定義了這個Bean。

因此,我們要做的就是讓ContextLoaderListenerDispatcherServlet分別加載不同的Bean:

新增applicationContext.xml,其中聲明ContextLoaderListener要加載的Bean:

修改spring.xml中的包掃描范圍,讓DispatcherServlet只加載mvc相關(guān)的Bean:

啟動服務(wù),查看初始化信息,Service只被初始化了一次:

到此這篇關(guān)于Spring的同一個服務(wù)為什么會加載多次?的文章就介紹到這了,更多相關(guān)Spring的同一個服務(wù)為什么會加載多次?內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 改變JAVA窗體屬性的操作方法

    改變JAVA窗體屬性的操作方法

    在本篇內(nèi)容里小編給大家詳細(xì)分析了關(guān)于改變JAVA窗體屬性的操作方法和步驟,需要的朋友們學(xué)習(xí)下。
    2018-12-12
  • Google Guava 緩存工具使用詳解

    Google Guava 緩存工具使用詳解

    這篇文章主要介紹了Guava自加載緩存LoadingCache使用指南,通過這些內(nèi)容介紹,了解了LoadingCache的基本原理和用法,包括如何創(chuàng)建和配置緩存,以及如何結(jié)合Java?8的特性來優(yōu)化代碼,需要的朋友可以參考下
    2023-12-12
  • Java高效調(diào)試排查代碼技巧詳解

    Java高效調(diào)試排查代碼技巧詳解

    這篇文章主要介紹了Java高效調(diào)試排查代碼技巧,調(diào)試是一項不可或缺的技能,無論你是經(jīng)驗豐富的開發(fā)者,還是初入編程世界的新手,都難免會遇到代碼出錯的情況,有效的調(diào)試能幫助我們快速定位并解決問題,提高開發(fā)效率,需要的朋友可以參考下
    2025-04-04
  • Java實現(xiàn)基本排序算法的示例代碼

    Java實現(xiàn)基本排序算法的示例代碼

    排序就是將一串記錄按照其中某個或某些關(guān)鍵字的大小,遞增或遞減的排列起來的操作。本文將用Java實現(xiàn)一些基本的排序算法,感興趣的可以了解一下
    2022-07-07
  • java讀取其他服務(wù)接口返回的json數(shù)據(jù)示例代碼

    java讀取其他服務(wù)接口返回的json數(shù)據(jù)示例代碼

    這篇文章主要給大家介紹了關(guān)于java讀取其他服務(wù)接口返回的json數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • 深入理解Java設(shè)計模式之享元模式

    深入理解Java設(shè)計模式之享元模式

    這篇文章主要介紹了JAVA設(shè)計模式之享元模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2021-11-11
  • Mybatis懶加載的實現(xiàn)

    Mybatis懶加載的實現(xiàn)

    這篇文章主要介紹了Mybatis懶加載的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java如何實現(xiàn)壓縮文件與解壓縮zip文件

    Java如何實現(xiàn)壓縮文件與解壓縮zip文件

    這篇文章主要介紹了Java如何實現(xiàn)壓縮文件與解壓縮zip文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java后端向前端返回文件流實現(xiàn)下載功能

    Java后端向前端返回文件流實現(xiàn)下載功能

    后端可以使用Java中servlet提供的HttpServletResponse,核心步驟是要設(shè)置響應(yīng)的數(shù)據(jù)類型,設(shè)置為某一類文件類型或二進制格式,以及響應(yīng)頭,然后用ServletOutputStream將文件以流的形式發(fā)送到前端,本文介紹Java后端向前端返回文件流實現(xiàn)下載功能,感興趣的朋友一起看看吧
    2023-12-12
  • Mybatis-Plus如何使用分頁實例詳解

    Mybatis-Plus如何使用分頁實例詳解

    最近在研究mybatis,然后就去找簡化mybatis開發(fā)的工具,下面這篇文章主要給大家介紹了關(guān)于Mybatis-Plus如何使用分頁的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03

最新評論

象州县| 宁安市| 库伦旗| 宜兴市| 金坛市| 手机| 桃园市| 安徽省| 辰溪县| 岳池县| 桂林市| 杭锦后旗| 东城区| 安福县| 临桂县| 嘉禾县| 灵山县| 西安市| 甘孜县| 宿迁市| 石门县| 泰宁县| 额敏县| 文水县| 龙州县| 辽宁省| 盐源县| 汕头市| 达日县| 潞西市| 河池市| 揭东县| 永年县| 察隅县| 霍州市| 望江县| 淮阳县| 明光市| 远安县| 平南县| 荣昌县|