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

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

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

問題現(xiàn)象

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

問題分析

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

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

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

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

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

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

接下來我們看一下項目中的 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相關的Bean:

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

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

相關文章

  • java:程序包org.bouncycastle.jce.provider不存在問題及解決

    java:程序包org.bouncycastle.jce.provider不存在問題及解決

    這篇文章主要介紹了java:程序包org.bouncycastle.jce.provider不存在問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • SpringBoot項目中java -jar xxx.jar沒有主清單屬性的解決方法

    SpringBoot項目中java -jar xxx.jar沒有主清單屬性的解決方法

    這篇文章主要給大家介紹了SpringBoot項目中java -jar xxx.jar沒有主清單的解決方法,文中通過代碼示例給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • Spring自動裝配Bean實現(xiàn)過程詳解

    Spring自動裝配Bean實現(xiàn)過程詳解

    這篇文章主要介紹了Spring自動裝配Bean實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Spring Boot+Nginx實現(xiàn)大文件下載功能

    Spring Boot+Nginx實現(xiàn)大文件下載功能

    相信很多小伙伴,在日常開放中都會遇到大文件下載的情況,大文件下載方式也有很多,比如非常流行的分片下載、斷點下載;當然也可以結合Nginx來實現(xiàn)大文件下載,在中小項目非常適合使用,這篇文章主要介紹了Spring Boot結合Nginx實現(xiàn)大文件下載,需要的朋友可以參考下
    2024-05-05
  • java web服務器實現(xiàn)跨域訪問

    java web服務器實現(xiàn)跨域訪問

    這篇文章主要為大家詳細介紹了java web服務器實現(xiàn)跨域訪問,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • SpringBoot使用CXF集成WebService的方法

    SpringBoot使用CXF集成WebService的方法

    這篇文章主要介紹了SpringBoot使用CXF集成WebService的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • Java 如何獲取url地址文件流

    Java 如何獲取url地址文件流

    這篇文章主要介紹了Java 如何獲取url地址文件流,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • springboot上傳文件并返回url過程

    springboot上傳文件并返回url過程

    這篇文章主要介紹了springboot上傳文件并返回url過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SpringBoot深入分析講解監(jiān)聽器模式上

    SpringBoot深入分析講解監(jiān)聽器模式上

    監(jiān)聽器模式,大家應該并不陌生,主要的組成要素包括了事件、監(jiān)聽器以及廣播器;當事件發(fā)生時,廣播器負責將事件傳遞給所有已知的監(jiān)聽器,而監(jiān)聽器會對自己感興趣的事件進行處理
    2022-07-07
  • java復制文件和java移動文件的示例分享

    java復制文件和java移動文件的示例分享

    本文主要介紹了java將文件夾下面的所有的jar文件拷貝到指定的文件夾下面的方法,需要的朋友可以參考下
    2014-02-02

最新評論