日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

Spring bean的實(shí)例化方式之靜態(tài)工廠和實(shí)例工廠的區(qū)別

作者:水挼藍(lán) 更新時間: 2024-03-08 編程語言

Spring bean的實(shí)例化方式之靜態(tài)工廠和實(shí)例工廠的區(qū)別

什么是靜態(tài)工廠方法,什么是實(shí)例工廠方法?

一、創(chuàng)建對象的方法

首先我們需要知道,創(chuàng)建對象有很多種方法:通過new關(guān)鍵詞、使用構(gòu)造函數(shù)、使用clone()、反序列化、工廠模式等,接下來重點(diǎn)講解工廠模式

1.工廠模式:

  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)工廠方法聲明

  1. 準(zhǔn)備組件類
public class ClientService {
  private static ClientService clientService = new ClientService();
  private ClientService() {}

  public static ClientService createInstance() {
    return clientService;
  }
}
  1. 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

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新