網站首頁 編程語言 正文
Spring bean的實例化方式之靜態工廠和實例工廠的區別
什么是靜態工廠方法,什么是實例工廠方法?
一、創建對象的方法
首先我們需要知道,創建對象有很多種方法:通過new關鍵詞、使用構造函數、使用clone()、反序列化、工廠模式等,接下來重點講解工廠模式
1.工廠模式:
-
工廠模式
,它是一種設計模式,可以將對象的創建和使用解耦,通過定義一個對象工廠,可以更加靈活地產生對象。例如,Animal createdAnimal = factory.createAnimal(param1, param2);
。
2.靜態工廠
工廠初始化之前,工廠中的類已經被實例化放在工廠容器中,就是可以直接通過靜態方法來實例化一個對象。
如
public class HelloWorldFactory {
public static HelloWorld getInstance(){
return new HelloWorld();
}
}
HelloWorldFactory.getInstance()
創建 HelloWorld 對象直接可以調用getInstance方法來進行實現
3.實例工廠方法
工廠在構造方法初始化時,會將類進行實例化放在工廠中,就是先創建類對象,如何通過對象來調用創建實例對象的方法。
如
public class HelloWorldFactory {
public HelloWorld createHelloWorld(){
return new HelloWorld();
}
}
HelloWorldFactory helloFactory = new HelloWorldFactory();
helloFactory.createHelloWorld();
創建HelloWorld 對象需要先創建一個HelloWorldFactory工廠類對象,再調用該HelloWorldFactory工廠類的createHelloWorld()方法。
二、如何聲明工廠方法來進行IoC的配置
1.靜態工廠方法聲明
- 準備組件類
public class ClientService {
private static ClientService clientService = new ClientService();
private ClientService() {}
public static ClientService createInstance() {
return clientService;
}
}
-
xml配置文件編寫
文件:resources/spring-bean-01.xml
<bean id="clientService"
class="examples.ClientService"
factory-method="createInstance"/>
- class屬性:指定工廠類的全限定符!
- factory-method: 指定靜態工廠方法,注意,該方法必須是static方法。
2.實例工廠方法聲明
接下來我門講解下如何定義使用實例工廠方法創建Bean的配置!
a.準備組件類
a.準備組件類
public class DefaultServiceLocator {
private static ClientServiceImplclientService = new ClientServiceImpl();
public ClientService createClientServiceInstance() {
return clientService;
}
}
b.xml配置文件編寫
<!-- 將工廠類進行ioc配置 -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
</bean>
<!-- 根據工廠對象的實例工廠方法進行實例化組件對象 -->
<bean id="clientService"
factory-bean="serviceLocator"
factory-method="createClientServiceInstance"/>
- factory-bean屬性:指定當前容器工廠Bean的名稱。
- factory-method: 指定實例工廠方法名。注意,實例方法必須是非static的!
總結:
靜態工廠方法和實例工廠方法都可以用來創建Bean實例,但它們的使用場景不同。如果我們需要創建一個簡單的Bean實例,并且不需要在創建之前進行任何初始化,那么使用靜態工廠方法可能更加方便。但是,如果我們需要在創建Bean實例之前執行一些初始化操作,或者需要動態地創建Bean實例,那么實例工廠方法可能更加適合。
原文鏈接:https://blog.csdn.net/weixin_62075792/article/details/136438888
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2023-01-18 React?Fiber?樹思想解決業務實際場景詳解_React
- 2023-07-18 Spring 中的 Service 有多個實現類如何注入
- 2022-08-13 Spring Boot中Lombok的使用
- 2023-04-27 antd?upload上傳如何獲取文件寬高_React
- 2022-10-28 Pandas實現兩個表的連接功能的方法詳解_python
- 2022-04-03 Python-Selenium自動化爬蟲_python
- 2022-04-18 python?如何使用requests下載文件_python
- 2022-06-28 C++實現String與UF8互轉_C 語言
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支