Spring框架中的工廠模式

在Spring框架里,工廠模式的運用十分廣泛,它主要幫助我們創建和管理對象,讓對象的創建和使用分離,提高代碼的可維護性和可擴展性。下面為你詳細介紹Spring框架中工廠模式的具體體現和示例:

1. BeanFactory 作為工廠模式的基礎實現

BeanFactory 是Spring框架中最基礎的工廠接口,它定義了獲取Bean的方法,Spring通過它來創建和管理各種Bean實例。BeanFactory 采用了延遲加載策略,即只有在真正需要某個Bean時才會去創建它。

示例代碼
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;// 定義一個簡單的Java類作為Bean
class MyBean {public void sayHello() {System.out.println("Hello from MyBean!");}
}public class BeanFactoryExample {public static void main(String[] args) {// 加載Spring配置文件Resource resource = new ClassPathResource("applicationContext.xml");// 創建BeanFactory實例BeanFactory factory = new XmlBeanFactory(resource);// 從工廠中獲取Bean實例MyBean myBean = (MyBean) factory.getBean("myBean");// 調用Bean的方法myBean.sayHello();}
}
配置文件 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 定義一個Bean --><bean id="myBean" class="MyBean"/>
</beans>
代碼解釋
  • 在上述代碼中,BeanFactory 就像一個工廠,根據配置文件 applicationContext.xml 中的定義來創建 MyBean 實例。我們通過 factory.getBean("myBean") 方法從工廠中獲取 MyBean 實例,而不需要手動去創建它。

2. ApplicationContext 作為高級工廠

ApplicationContextBeanFactory 的子接口,它在 BeanFactory 的基礎上提供了更多的功能,如國際化支持、事件發布等。ApplicationContext 采用了預加載策略,即在容器啟動時就會創建所有的單例Bean。

示例代碼
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;// 定義一個簡單的Java類作為Bean
class MyAnotherBean {public void doSomething() {System.out.println("Doing something in MyAnotherBean!");}
}public class ApplicationContextExample {public static void main(String[] args) {// 加載Spring配置文件并創建ApplicationContext實例ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext2.xml");// 從ApplicationContext中獲取Bean實例MyAnotherBean myAnotherBean = context.getBean("myAnotherBean", MyAnotherBean.class);// 調用Bean的方法myAnotherBean.doSomething();}
}
配置文件 applicationContext2.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 定義一個Bean --><bean id="myAnotherBean" class="MyAnotherBean"/>
</beans>
代碼解釋
  • 這里的 ApplicationContext 同樣扮演著工廠的角色,它根據配置文件 applicationContext2.xml 創建 MyAnotherBean 實例。我們使用 context.getBean("myAnotherBean", MyAnotherBean.class) 方法從 ApplicationContext 中獲取指定類型的 MyAnotherBean 實例,然后調用其方法。

3. 工廠方法模式在Spring中的應用

Spring還支持工廠方法模式,允許我們通過自定義的工廠類和工廠方法來創建Bean。

示例代碼
// 定義一個產品類
class Product {public void use() {System.out.println("Using the product.");}
}// 定義一個工廠類
class ProductFactory {public Product createProduct() {return new Product();}
}import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class FactoryMethodExample {public static void main(String[] args) {// 加載Spring配置文件并創建ApplicationContext實例ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext3.xml");// 從ApplicationContext中獲取Bean實例Product product = context.getBean("product", Product.class);// 調用Bean的方法product.use();}
}
配置文件 applicationContext3.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 定義工廠類 --><bean id="productFactory" class="ProductFactory"/><!-- 使用工廠方法創建Bean --><bean id="product" factory-bean="productFactory" factory-method="createProduct"/>
</beans>
代碼解釋
  • 在這個例子中,ProductFactory 是一個自定義的工廠類,其中的 createProduct 方法是工廠方法,用于創建 Product 實例。在Spring配置文件中,我們通過 factory-beanfactory-method 屬性指定使用 ProductFactorycreateProduct 方法來創建 product Bean。最后,我們從 ApplicationContext 中獲取 product Bean 并調用其方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72253.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

音視頻-WAV格式

1. WAV格式說明&#xff1a; 2. 格式說明&#xff1a; chunkId&#xff1a;通常是 “RIFF” 四個字節&#xff0c;用于標識文件類型。&#xff08;wav文件格式表示&#xff09;chunkSize&#xff1a;表示整個文件除了chunkId和chunkSize這 8 個字節外的其余部分的大小。Forma…

SQL Server Management Studio的使用

之前在https://blog.csdn.net//article/details/140961550介紹了在Windows10上安裝SQL Server 2022 Express和SSMS&#xff0c;這里整理下SSMS的簡單使用&#xff1a; SQL Server Management Studio(SSMS)是一種集成環境&#xff0c;提供用于配置、監視和管理SQL Server和數據…

數據集筆記:NUSMods API

1 介紹 NUSMods API 包含用于渲染 NUSMods 的數據。這些數據包括新加坡國立大學&#xff08;NUS&#xff09;提供的課程以及課程表的信息&#xff0c;還包括上課地點的詳細信息。 可以使用并實驗這些數據&#xff0c;它們是從教務處提供的官方 API 中提取的。 該 API 由靜態的…

劍指 Offer II 031. 最近最少使用緩存

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20031.%20%E6%9C%80%E8%BF%91%E6%9C%80%E5%B0%91%E4%BD%BF%E7%94%A8%E7%BC%93%E5%AD%98/README.md 劍指 Offer II 031. 最近最少使用緩存 題目描述 運用所掌握的…

uniapp 測試 IPA 包安裝到測試 iPhone

將uniapp測試IPA包安裝到測試iPhone有以下幾種方法&#xff1a; 使用Xcode安裝 確保計算機上安裝了Xcode&#xff0c;并將iOS設備通過數據線連接到計算機。打開Xcode&#xff0c;在菜單欄中選擇Window->Devices and Simulators&#xff0c;在設備列表中找到要安裝的iPhone…

vcredist_x64 資源文件分享

vcredist_x64 是 Microsoft Visual C Redistributable 的 64 位版本&#xff0c;用于在 64 位 Windows 系統上運行使用 Visual C 開發的應用程序。它包含了運行這些應用程序所需的運行時組件。 vcredist_x64 資源工具網盤下載鏈接&#xff1a;https://pan.quark.cn/s/ef56f838f…

weaviate 安裝與測試

weaviate 安裝 前提條件&#xff1a;docker安裝完成 步驟&#xff1a; 開啟docker 在終端運行命令 docker run -p 8080:8080 -p 50051:50051 cr.weaviate.io/semitechnologies/weaviate:1.29.0 weaviate 測試 python-client安裝代碼測試 import weaviate client weaviat…

機器學習:監督學習、無監督學習和強化學習

機器學習&#xff08;Machine Learning, ML&#xff09;是人工智能&#xff08;AI&#xff09;的一個分支&#xff0c;它使計算機能夠從數據中學習&#xff0c;并在沒有明確編程的情況下執行任務。機器學習的核心思想是使用算法分析數據&#xff0c;識別模式&#xff0c;并做出…

自學微信小程序的第六天

DAY6 1、使用錄音API首先需要通過wx.getRecorderManager()方法獲取到一個RecorderManager實例,該實例是一個全局唯一的錄音管理器,用于實現錄音功能。 表32:RecorderManager實例的常用方法 方法名稱 說明 start() 開始錄音 pause() 暫停錄音 resume() 繼續錄音 stop() 停止…

【數據分析】上市公司市場勢力數據測算+dofile(1992-2023年)

市場勢力通常指的是公司在市場中的相對競爭力和定價能力。具有較強市場勢力的公司通常能夠控制價格、影響市場規則&#xff0c;并在競爭中占據主導地位。A股公司市場勢力數據是對中國資本市場中公司競爭力的深入分析&#xff0c;A股市場中&#xff0c;公司市場勢力的強弱不僅影…

Linux三種網絡方式

前言 發現運維啥都得會&#xff0c;這周就遇到了網絡問題自己無法解決&#xff0c;因此痛定思痛學一下。 參考文獻 你管這破玩意叫網絡&#xff1f; 橋接模式、NAT模式、僅主機模式&#xff0c;原來是這樣工作的 交換機 構成局域網&#xff0c;實現所有設備之間的通信。 …

DeepSeek + Mermaid編輯器——常規繪圖

下面這張圖出自&#xff1a;由清華大學出品的 《DeepSeek&#xff1a;從入門到精通》。 作為純文本生成模型&#xff0c;DeepSeek雖不具備多媒體內容生成接口&#xff0c;但其開放式架構允許通過API接口與圖像合成引擎、數據可視化工具等第三方系統進行協同工作&#xff0c;最終…

javaweb將上傳的圖片保存在項目文件webapp下的upload文件夾下

前端HTML表單 (upload.html) 首先&#xff0c;創建一個HTML頁面&#xff0c;允許用戶選擇并上傳圖片。 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>圖片上傳</title> </head> <…

2025最新Flask學習筆記(對照Django做解析)

前言&#xff1a;如果還沒學Django的同學&#xff0c;可以看Django 教程 | 菜鳥教程&#xff0c;也可以忽略下文所提及的Django內容&#xff1b;另外&#xff0c;由于我們接手的項目大多都是前后端分離的項目&#xff0c;所以本文會跳過對模板的介紹&#xff0c;感興趣的朋友可…

自然語言處理NLP入門 -- 第十一節NLP 實戰項目 3: 文本摘要

1. 為啥需要文本摘要&#xff1f; 還記得小時候我們要寫“讀后感”或“觀后感”嗎&#xff1f;看完一篇長長的文章、一本書&#xff0c;甚至一部電影后&#xff0c;老師總是要我們用幾句話概括主要內容。其實&#xff0c;這就跟文本摘要的核心思路一樣——把那些最有價值、最能…

算法day4 dfs搜索2題

一 糖果 我們看這個藍橋A組真題 首先我們看這個題目說有M種的糖果&#xff0c;K顆一包&#xff0c;N包糖果 第一行就是輸入M&#xff0c;K&#xff0c;N的數量 后面就是輸入每個糖果在每包里面的種類 然后問我們最少要用幾包糖果才可以把所有種類的糖果都吃一遍 如果不可以吃完…

【MySQL】窗口函數詳解(概念+練習+實戰)

文章目錄 前言1. SQL窗口函數 1.1 窗口函數概念1.2 窗口函數語法1.3 常見窗口函數 1.3.1 聚合窗口函數1.3.2 專用窗口函數 1.4 窗口函數性能比較 2. LeetCode 例題 2.1 LeetCode SQL 178&#xff1a;分數排名2.2 LeetCode SQL 184&#xff1a;最高工資2.3 LeetCode SQL 185&am…

【Ai】--- DeepSeek-r1 如何選擇適合自己的版本(超詳細)

在編程的藝術世界里&#xff0c;代碼和靈感需要尋找到最佳的交融點&#xff0c;才能打造出令人為之驚嘆的作品。而在這座秋知葉i博客的殿堂里&#xff0c;我們將共同追尋這種完美結合&#xff0c;為未來的世界留下屬于我們的獨特印記。 【Ai】--- DeepSeek-r1 如何選擇適合自己…

植物大戰僵尸金鏟鏟版 v1.1.6(windows+安卓)

游戲簡介 《植物大戰僵尸金鏟鏟版》是由“古見xzz”、“對不起賤笑了”、“是怪哉吖”等聯合開發的民間魔改版本&#xff0c;融合了原版塔防玩法與《金鏟鏟之戰》的自走棋元素&#xff0c;屬于非官方同人作品。 游戲特點 合成升星機制&#xff1a;三個相同低星植物可合成更高…

網絡空間安全(6)web應用程序技術

前言 Web應用程序技術是指用于開發和構建基于Web的應用程序的技術和工具&#xff0c;涵蓋了前端開發、后端開發、數據庫管理、安全性等多個方面的技術。 一、前端開發技術 HTML/CSS/JavaScript&#xff1a;HTML用于構建網頁結構&#xff0c;CSS用于進行樣式設計&#xff0c;Jav…