工厂方法与FactoryBean
?
1.?静态工厂方法??? 将静态工厂方法实现类的工厂方法调用结果作为bean注册到容器中
?
<bean id=" " factory-method="getInstance" />
?
??? 为了包含方法参数的工厂方法能够预期返回相应的实现类实例,可以通过<constructor-arg>为工厂方法传入相应参数。
??? 针对基于工厂类实例的工厂方法调用结果作为bean注册到容器中
<bean id="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=" " />
?
??? 使用该bean注入的对象类型是实现FactoryBean类getObjectType()方法返回的类对象的元类型。
??? 如果需要获取FactoryBean本身的对象,通过在bean定义的id之前加前缀&来达到目的。