Java - Spring中BeanFactory和FactoryBean的区别

2023-12-13 14:44:03

BeanFactory

Spring IoC容器的顶级对象,BeanFactory被翻译为“Bean工厂”,在Spring的IoC容器中,“Bean工厂”负责创建Bean对象。

BeanFactory是工厂。


FactoryBean

FactoryBean:它是一个Bean,是一个能够辅助Spring实例化其它Bean对象的一个Bean。

在Spring中,Bean可以分为两类:

  • 第一类:普通Bean

  • 第二类:工厂Bean(记住:工厂Bean也是一种Bean,只不过这种Bean比较特殊,它可以辅助Spring实例化其它Bean对象。)


Bean的实例化方式

通过构造方法实例化

<bean id="userBean" class="com.spring6.bean.User"/>

默认情况下,会调用Bean的无参数构造方法 ?


通过简单工厂模式实例化

<bean id="vipBean" class="com.spring6.bean.VipFactory" factory-method="get"/>
public class VipFactory {
    public static Vip get(){
        return new Vip();
    }
}

?


通过factory-bean实例化

本质上是:通过工厂方法模式进行实例化

public class OrderFactory {
    public Order get(){
        return new Order();
    }
}
<bean id="orderFactory" class="com.spring6.bean.OrderFactory"/>
<bean id="orderBean" factory-bean="orderFactory" factory-method="get"/>

?


通过FactoryBean接口实例化

以上的第三种方式中,factory-bean是我们自定义的,factory-method也是我们自己定义的。

在Spring中,当你编写的类直接实现FactoryBean接口之后,factory-bean不需要指定了,factory-method也不需要指定了。

factory-bean会自动指向实现FactoryBean接口的类,factory-method会自动指向getObject()方法。

public class PersonFactoryBean implements FactoryBean<Person> {

    @Override
    public Person getObject() throws Exception {
        return new Person();
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        // true表示单例
        // false表示原型
        return true;
    }
}
<bean id="personBean" class="com.spring6.bean.PersonFactoryBean"/>

?FactoryBean在Spring中是一个接口。被称为“工厂Bean”。“工厂Bean”是一种特殊的Bean。所有的“工厂Bean”都是用来协助Spring框架来创建其他Bean对象的。

文章来源:https://blog.csdn.net/m0_65228708/article/details/134954029
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。