工厂方法与FactoryBean

 

1. 静态工厂方法

    将静态工厂方法实现类的工厂方法调用结果作为bean注册到容器中

 

<bean id=" " class="…Factory" factory-method="getInstance" />

 
    为了包含方法参数的工厂方法能够预期返回相应的实现类实例,可以通过<constructor-arg>为工厂方法传入相应参数。


2. 非静态工厂方法

    针对基于工厂类实例的工厂方法调用结果作为bean注册到容器中

<bean id="factory" class="…Factory" />
<bean id=" " factory-bean="factory" factory-method="getInstance" />

 
    …Factory作为正常的bean注册到容器,使用factory-bean属性来制定工厂方法所在的工厂类实例,而不是通过class属性来指定工厂方法所在类的类型。指定工厂方法名则相同。


3. FactoryBean

    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之前加前缀&来达到目的。

你可能感兴趣的:(spring,bean,xml)