将静态工厂方法实现类的工厂方法调用结果作为bean注册到容器中
<bean id=" " class="…Factory" factory-method="getInstance" />
为了包含方法参数的工厂方法能够预期返回相应的实现类实例,可以通过<constructor-arg>为工厂方法传入相应参数。
针对基于工厂类实例的工厂方法调用结果作为bean注册到容器中
<bean id="factory" class="…Factory" /> <bean id=" " factory-bean="factory" factory-method="getInstance" />
…Factory作为正常的bean注册到容器,使用factory-bean属性来制定工厂方法所在的工厂类实例,而不是通过class属性来指定工厂方法所在类的类型。指定工厂方法名则相同。
FactoryBean是Spring容器提供的一种可扩展容器对象实例化逻辑的接口,这种类型的Bean本身就是生产对象的工厂。当某些对象的实例化过程过于繁琐,通过XML配置过于复杂,除了使用java代码完成实例化过程,还可通过实现org.springframework.beans.factory.FactoryBean接口。
org.springframework.beans.factory.FactoryBean定义了三个方法:
public interface FactoryBean {
Object getObject() throws Exception;
Class getObjectType();
Boolean isSingleton();
}
getObject()方法返回该FactoryBean生产的对象实例,getObjectType()方法仅返回getObject()方法所返回的对象的类型。isSingleton()方法返回结果用于表明,getObject()对象是否以singleton形式存在于容器中。如果以singleton形式存在,返回ture,否则返回false。
<bean id=" " class="…FactoryBean" />
使用该bean注入的对象类型是实现FactoryBean类getObjectType()方法返回的类对象的元类型。
如果需要获取FactoryBean本身的对象,通过在bean定义的id之前加前缀&来达到目的。