Spring之FactoryBean

博客介绍了Spring中FactoryBean,它是实现FactoryBean接口的Bean,与普通Bean不同,根据其ID从BeanFactory获取的是getObject()返回的对象,要获取其本身需在id前加&。它是简单工厂模式接口类,生产单一类型对象,实现类需注册到BeanFactory。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

  • 以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean接口的Bean,根据该Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FactoryBean本身,如果要获取FactoryBean对象,请在id前面加一个&符号来获取。

  • FactoryBean仍然是一个bean,但不同于普通bean,它的实现类最终也需要注册到BeanFactory中。它也是一种简单工厂模式的接口类,但是生产的是单一类型的对象,与BeanFactory生产多种类型对象不同。

源码

package org.springframework.beans.factory;

public interface FactoryBean<T> {

	/**
	 * Return an instance (possibly shared or independent) of the object
	 * managed by this factory.
	 * 返回由FactoryBean管理的对象实例
	 */
	T getObject() throws Exception;
	
  /**
	 * Return the type of object that this FactoryBean creates,
	 * or {@code null} if not known in advance.
	 * 返回对象实例的类型
	 */
	Class<?> getObjectType();

	/**
	 * Is the object managed by this factory a singleton? 
	 */
	boolean isSingleton();
}

创建对象

  • 实体类People
public class People {
    //在People中加入name属性
    private String name;

    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name=name;
    }

    public void sleep(){
        System.out.println("睡觉了!");
    }
}
  • 自定义工厂Bean,实现FactoryBean接口
public class PeopleFactoryBean implements FactoryBean<People> {
    private String name;

    public void setName(String name){
        this.name=name;
    }

    @Override
    public People getObject() throws Exception{
        People p=new People();
        p.setName(name);
        return p;
    }

    @Override
    public Class<?> getObjectType(){
        return People.class;
    }

    @Override
    public boolean isSingleton(){
        return true;
    }
}
  • 配置文件中配置
<bean id="people" class="com.codestd.springstudy.bean.create.PeopleFactoryBean" >
    <property name="name" value="天明" />
</bean>

参考文档:

  1. https://blog.51cto.com/4247649/2118353
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值