搜尋
首頁Javajava教程魔法範圍:Spring 如何組織 beans

熟練而勤奮的助手 - beans - 在 Spring 工作室工作。他們每個人都被賦予了自己獨特的任務:有的創造玩具,有的分類糖果,有的種植鮮豔的花朵。

為確保研討會工作有序高效,針對垃圾箱 - 範圍制定了明確的規則。這些規則決定了 Bean 可以存在多長時間以及可以同時建立多少個同類實例。正是有了這些神奇的框架,研討會得以順利、可靠地進行。

原型:刺蝟貝克

Волшебные скоупы: Как Spring организует работу бинов
每當有人點派時,刺蝟麵包師都會用獨特的原料製作新的派。

刺蝟:「每個人都想要自己的口味!這就是為什麼我為每個訂單製作一個新鮮的餡餅。」

@Component
@Scope("prototype")
public class Hedgehog {
    public void bakePie() {
        System.out.println("Пеку пирог!");
    }
}

這就是作用域 prototype 在 Spring 中的工作方式:每次請求新物件時,都會建立該 bean 的唯一實例。當您需要為每次使用提供獨立的邏輯時,這非常有用。

例如:

應用程式有一個為每個使用者產生報告的 bean:

@Component
@Scope("prototype")
public class ReportGenerator {
    public Report generate(String userData) {
        // Генерация уникального отчета
        return new Report(userData);
    }
}

每次呼叫 context.getBean(ReportGenerator.class) 都會建立一個新實例。這對於在多用戶系統中處理獨特的資料很方便。


請求:胡蘿蔔兔子

Волшебные скоупы: Как Spring организует работу бинов
配藥兔子向他的助手解釋:

「對於每一位來到空地的客人,我都會收集胡蘿蔔。但一旦客人離開,籃子就會回到我身邊。」

@Component
@Scope("prototype")
public class Hedgehog {
    public void bakePie() {
        System.out.println("Пеку пирог!");
    }
}

Spring中的

Request範圍意味著為每個HTTP請求建立一個bean。一旦請求完成,bean 就會被銷毀。

使用範例:
想像一下,在 Web 應用程式中,您有一個用於收集使用者資料的元件:

@Component
@Scope("prototype")
public class ReportGenerator {
    public Report generate(String userData) {
        // Генерация уникального отчета
        return new Report(userData);
    }
}

每個使用者請求都被分配一個唯一的籃子,它僅作為處理 HTTP 請求的一部分而「存在」。請求完成後,bean 將被刪除,釋放記憶體。

實際開發中Prototype和Request的比較:

原型:用於每次呼叫都需要唯一實例的任務,例如測試、產生唯一資料、處理獨立任務。
請求:在 Web 應用程式中很有用,可在使用者請求之間提供資料隔離。例如,購物車、身份驗證資料或臨時令牌。
方法差異:

原型可以在任何上下文中使用,包括控制台應用程式。
請求嚴格綁定到 Web 上下文,因為它依賴 HTTP 請求。


Singleton:建造者鮑勃

Волшебные скоупы: Как Spring организует работу бинов
建造者鮑伯在森林裡工作,為每個人建造一座水壩。他說:

「我孤單一人,我會建造任何東西,無論有多少動物來找我!」

這表示我們將始終擁有所有客戶端存取的相同物件實例。每次都是同一個鮑伯來。他不需要被克隆或消失。於是他日復一日地工作。

@Component
@Scope("prototype")
public class Hedgehog {
    public void bakePie() {
        System.out.println("Пеку пирог!");
    }
}

Singleton 是 Spring 中預設的作用域。 Bean 的一個實例是在應用程式的整個運行期間建立的。當物件必須是所有應用程式元件之間的共用資源時,請使用此 bean。

使用範例:
假設您有一個日誌組件:

@Component
@Scope("prototype")
public class ReportGenerator {
    public Report generate(String userData) {
        // Генерация уникального отчета
        return new Report(userData);
    }
}

該 bean 會建立一次,所有應用程式元件都使用它來記錄日誌。這樣既有效率又節省內存。

申請

  • 記錄
  • 透過連線池使用資料庫
  • 管理快取

會議:親愛的熊

Волшебные скоупы: Как Spring организует работу бинов
小熊為每一位來到他家的客人煮蜂蜜。他說:

「當你來看我的時候,我會照顧你的蜜罐。但是一旦你離開,你的蜜罐就消失了。」

@Component
@Scope("request")
public class Rabbit {
    public void giveCarrot() {
        System.out.println("Вот твоя морковка!");
    }
}

Spring 中的會話作用域意味著只要使用者的 HTTP 會話持續,bean 就存在。

技術說明:
此作用域在 Web 應用程式中用於將物件綁定到特定的使用者會話。當會話結束時,bean 將被銷毀。

使用範例:
想像一下,您有一個用於儲存使用者授權資料的元件:

@Component
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserCart {
    private List<item> items = new ArrayList();

    public void addItem(Item item) {
        items.add(item);
    }

    public List<item> getItems() {
        return items;
    }
}

</item></item>

只要使用者的會話持續,就會為每個使用者建立此 Bean。

申請

  • 儲存使用者資料(例如授權、偏好)
  • 會話令牌管理

應用:菲林·菲爾

貓頭鷹菲爾每天晚上都會給所有森林居民講童話故事。他說:

「我的童話故事是整個森林裡唯一的,每個人都來聽我講,每個人都夠了!」

@Component
@Scope("prototype")
public class Hedgehog {
    public void bakePie() {
        System.out.println("Пеку пирог!");
    }
}

範圍 application 表示該 bean 為整個應用程式建立一次,但與單例不同,它僅在 Web 應用程式的上下文中使用。

此作用域類似單例,但由 Web 上下文控制。它用於必須在整個應用程式中可存取的元件。

使用範例:
例如,用於儲存全域設定的bean:

@Component
@Scope("prototype")
public class ReportGenerator {
    public Report generate(String userData) {
        // Генерация уникального отчета
        return new Report(userData);
    }
}

此 Bean 創建一次,可供所有人使用。

申請

  • 應用程式配置
  • 全域設定
  • 所有使用者共享的資料快取

所有 Spring 作用域的比較

範圍 生命週期 使用範例 標題>
Scope Жизненный цикл Пример использования
Singleton Всё время работы приложения Логирование, работа с базами данных
Prototype Новый объект при каждом вызове Генерация отчётов, тестирование
Request Один HTTP-запрос Корзина покупок, временные данные
Session Вся HTTP-сессия пользователя Данные авторизации, настройки пользователя
Application Всё время работы приложения Глобальные настройки, кэш на уровне приложения
單例 應用程式運行的所有時間 日誌記錄、使用資料庫 原型 每次呼叫新物件 報告生成、測試 請求 一個 HTTP 請求 購物車、臨時資料 會議 整個 HTTP 使用者會話 授權資料、使用者設定 申請 應用程式運行的所有時間 全域設置,應用級快取 表>

何時使用什麼?
Singleton - 用於共享、不變的資源。
原型 - 用於孤立的任務、獨特的數據。
請求 - 在一個請求中取得臨時資料。
會話 - 用於需要在相同使用者的請求之間儲存的資料。
應用程式 - 用於所有使用者使用的全域資料。

以上是魔法範圍:Spring 如何組織 beans的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
平台獨立性如何使企業級的Java應用程序受益?平台獨立性如何使企業級的Java應用程序受益?May 03, 2025 am 12:23 AM

Java在企業級應用中被廣泛使用是因為其平台獨立性。 1)平台獨立性通過Java虛擬機(JVM)實現,使代碼可在任何支持Java的平台上運行。 2)它簡化了跨平台部署和開發流程,提供了更大的靈活性和擴展性。 3)然而,需注意性能差異和第三方庫兼容性,並採用最佳實踐如使用純Java代碼和跨平台測試。

考慮到平台獨立性,Java在物聯網(物聯網)設備的開發中扮演什麼角色?考慮到平台獨立性,Java在物聯網(物聯網)設備的開發中扮演什麼角色?May 03, 2025 am 12:22 AM

JavaplaysigantroleiniotduetoitsplatFormentence.1)itallowscodeTobewrittenOnCeandrunonVariousDevices.2)Java'secosystemprovidesuseusefidesusefidesulylibrariesforiot.3)

描述一個方案,您在Java中遇到了一個特定於平台的問題以及如何解決。描述一個方案,您在Java中遇到了一個特定於平台的問題以及如何解決。May 03, 2025 am 12:21 AM

ThesolutiontohandlefilepathsacrossWindowsandLinuxinJavaistousePaths.get()fromthejava.nio.filepackage.1)UsePaths.get()withSystem.getProperty("user.dir")andtherelativepathtoconstructthefilepath.2)ConverttheresultingPathobjecttoaFileobjectifne

Java平台獨立對開發人員有什麼好處?Java平台獨立對開發人員有什麼好處?May 03, 2025 am 12:15 AM

Java'splatFormIndenceistificantBecapeitAllowSitallowsDevelostWriTecoDeonCeandRunitonAnyPlatFormwithAjvm.this“ writeonce,runanywhere”(era)櫥櫃櫥櫃:1)交叉plat formcomplibility cross-platformcombiblesible,enablingDeploymentMentMentMentMentAcrAptAprospOspOspOssCrossDifferentoSswithOssuse; 2)

將Java用於需要在不同服務器上運行的Web應用程序的優點是什麼?將Java用於需要在不同服務器上運行的Web應用程序的優點是什麼?May 03, 2025 am 12:13 AM

Java適合開發跨服務器web應用。 1)Java的“一次編寫,到處運行”哲學使其代碼可在任何支持JVM的平台上運行。 2)Java擁有豐富的生態系統,包括Spring和Hibernate等工具,簡化開發過程。 3)Java在性能和安全性方面表現出色,提供高效的內存管理和強大的安全保障。

JVM如何促進Java的'寫作一次,在任何地方運行”(WORA)功能?JVM如何促進Java的'寫作一次,在任何地方運行”(WORA)功能?May 02, 2025 am 12:25 AM

JVM通過字節碼解釋、平台無關的API和動態類加載實現Java的WORA特性:1.字節碼被解釋為機器碼,確保跨平台運行;2.標準API抽像操作系統差異;3.類在運行時動態加載,保證一致性。

Java的較新版本如何解決平台特定問題?Java的較新版本如何解決平台特定問題?May 02, 2025 am 12:18 AM

Java的最新版本通過JVM優化、標準庫改進和第三方庫支持有效解決平台特定問題。 1)JVM優化,如Java11的ZGC提升了垃圾回收性能。 2)標準庫改進,如Java9的模塊系統減少平台相關問題。 3)第三方庫提供平台優化版本,如OpenCV。

說明JVM執行的字節碼驗證的過程。說明JVM執行的字節碼驗證的過程。May 02, 2025 am 12:18 AM

JVM的字節碼驗證過程包括四個關鍵步驟:1)檢查類文件格式是否符合規範,2)驗證字節碼指令的有效性和正確性,3)進行數據流分析確保類型安全,4)平衡驗證的徹底性與性能。通過這些步驟,JVM確保只有安全、正確的字節碼被執行,從而保護程序的完整性和安全性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!