学无先后,达者为师

网站首页 编程语言 正文

Spring bean的实例化方式之静态工厂和实例工厂的区别

作者:水挼蓝 更新时间: 2024-03-08 编程语言

Spring bean的实例化方式之静态工厂和实例工厂的区别

什么是静态工厂方法,什么是实例工厂方法?

一、创建对象的方法

首先我们需要知道,创建对象有很多种方法:通过new关键词、使用构造函数、使用clone()、反序列化、工厂模式等,接下来重点讲解工厂模式

1.工厂模式:

  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.静态工厂方法声明

  1. 准备组件类
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: 指定静态工厂方法,注意,该方法必须是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

  • 上一篇:没有了
  • 下一篇:没有了
栏目分类
最近更新