熟練而勤奮的助手 - beans - 在 Spring 工作室工作。他們每個人都被賦予了自己獨特的任務:有的創造玩具,有的分類糖果,有的種植鮮豔的花朵。
為確保研討會工作有序高效,針對垃圾箱 - 範圍制定了明確的規則。這些規則決定了 Bean 可以存在多長時間以及可以同時建立多少個同類實例。正是有了這些神奇的框架,研討會得以順利、可靠地進行。
原型:刺蝟貝克
每當有人點派時,刺蝟麵包師都會用獨特的原料製作新的派。
刺蝟:「每個人都想要自己的口味!這就是為什麼我為每個訂單製作一個新鮮的餡餅。」
@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) 都會建立一個新實例。這對於在多用戶系統中處理獨特的資料很方便。
請求:胡蘿蔔兔子
配藥兔子向他的助手解釋:
「對於每一位來到空地的客人,我都會收集胡蘿蔔。但一旦客人離開,籃子就會回到我身邊。」
@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:建造者鮑勃
建造者鮑伯在森林裡工作,為每個人建造一座水壩。他說:
「我孤單一人,我會建造任何東西,無論有多少動物來找我!」
這表示我們將始終擁有所有客戶端存取的相同物件實例。每次都是同一個鮑伯來。他不需要被克隆或消失。於是他日復一日地工作。
@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 會建立一次,所有應用程式元件都使用它來記錄日誌。這樣既有效率又節省內存。
申請:
- 記錄
- 透過連線池使用資料庫
- 管理快取
會議:親愛的熊
小熊為每一位來到他家的客人煮蜂蜜。他說:
「當你來看我的時候,我會照顧你的蜜罐。但是一旦你離開,你的蜜罐就消失了。」
@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 | Всё время работы приложения | Глобальные настройки, кэш на уровне приложения |
何時使用什麼?
Singleton - 用於共享、不變的資源。
原型 - 用於孤立的任務、獨特的數據。
請求 - 在一個請求中取得臨時資料。
會話 - 用於需要在相同使用者的請求之間儲存的資料。
應用程式 - 用於所有使用者使用的全域資料。
以上是魔法範圍:Spring 如何組織 beans的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

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

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

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

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

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

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

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


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

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

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver Mac版
視覺化網頁開發工具

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

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