介绍
-
以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>
参考文档: