網(wǎng)站首頁 編程語言 正文
Spring bean的實(shí)例化方式之靜態(tài)工廠和實(shí)例工廠的區(qū)別
什么是靜態(tài)工廠方法,什么是實(shí)例工廠方法?
一、創(chuàng)建對象的方法
首先我們需要知道,創(chuàng)建對象有很多種方法:通過new關(guān)鍵詞、使用構(gòu)造函數(shù)、使用clone()、反序列化、工廠模式等,接下來重點(diǎn)講解工廠模式
1.工廠模式:
-
工廠模式
,它是一種設(shè)計(jì)模式,可以將對象的創(chuàng)建和使用解耦,通過定義一個對象工廠,可以更加靈活地產(chǎn)生對象。例如,Animal createdAnimal = factory.createAnimal(param1, param2);
。
2.靜態(tài)工廠
工廠初始化之前,工廠中的類已經(jīng)被實(shí)例化放在工廠容器中,就是可以直接通過靜態(tài)方法來實(shí)例化一個對象。
如
public class HelloWorldFactory {
public static HelloWorld getInstance(){
return new HelloWorld();
}
}
HelloWorldFactory.getInstance()
創(chuàng)建 HelloWorld 對象直接可以調(diào)用getInstance方法來進(jìn)行實(shí)現(xiàn)
3.實(shí)例工廠方法
工廠在構(gòu)造方法初始化時,會將類進(jìn)行實(shí)例化放在工廠中,就是先創(chuàng)建類對象,如何通過對象來調(diào)用創(chuàng)建實(shí)例對象的方法。
如
public class HelloWorldFactory {
public HelloWorld createHelloWorld(){
return new HelloWorld();
}
}
HelloWorldFactory helloFactory = new HelloWorldFactory();
helloFactory.createHelloWorld();
創(chuàng)建HelloWorld 對象需要先創(chuàng)建一個HelloWorldFactory工廠類對象,再調(diào)用該HelloWorldFactory工廠類的createHelloWorld()方法。
二、如何聲明工廠方法來進(jìn)行IoC的配置
1.靜態(tài)工廠方法聲明
- 準(zhǔn)備組件類
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: 指定靜態(tài)工廠方法,注意,該方法必須是static方法。
2.實(shí)例工廠方法聲明
接下來我門講解下如何定義使用實(shí)例工廠方法創(chuàng)建Bean的配置!
a.準(zhǔn)備組件類
a.準(zhǔn)備組件類
public class DefaultServiceLocator {
private static ClientServiceImplclientService = new ClientServiceImpl();
public ClientService createClientServiceInstance() {
return clientService;
}
}
b.xml配置文件編寫
<!-- 將工廠類進(jìn)行ioc配置 -->
<bean id="serviceLocator" class="examples.DefaultServiceLocator">
</bean>
<!-- 根據(jù)工廠對象的實(shí)例工廠方法進(jìn)行實(shí)例化組件對象 -->
<bean id="clientService"
factory-bean="serviceLocator"
factory-method="createClientServiceInstance"/>
- factory-bean屬性:指定當(dāng)前容器工廠Bean的名稱。
- factory-method: 指定實(shí)例工廠方法名。注意,實(shí)例方法必須是非static的!
總結(jié):
靜態(tài)工廠方法和實(shí)例工廠方法都可以用來創(chuàng)建Bean實(shí)例,但它們的使用場景不同。如果我們需要創(chuàng)建一個簡單的Bean實(shí)例,并且不需要在創(chuàng)建之前進(jìn)行任何初始化,那么使用靜態(tài)工廠方法可能更加方便。但是,如果我們需要在創(chuàng)建Bean實(shí)例之前執(zhí)行一些初始化操作,或者需要動態(tài)地創(chuàng)建Bean實(shí)例,那么實(shí)例工廠方法可能更加適合。
原文鏈接:https://blog.csdn.net/weixin_62075792/article/details/136438888
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2022-07-14 python重復(fù)值處理得方法_python
- 2022-10-03 C++深入探究重載重寫覆蓋的區(qū)別_C 語言
- 2023-05-31 Pandas多個條件(AND,OR,NOT)中提取行_python
- 2022-05-11 并發(fā)編程之JMM模型和并發(fā)三大特性
- 2022-12-29 基于Python寫一個番茄鐘小工具_(dá)python
- 2022-08-17 Python字典查找數(shù)據(jù)的5個基礎(chǔ)操作方法_python
- 2022-10-26 jQuery中DOM?屬性使用實(shí)例詳解上篇_jquery
- 2022-01-17 element日期時間選擇器提交時間格式不準(zhǔn)確
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支