spring factory-method和spring-bean

配置工厂Bean
通常由应用程序直接使用new创建新的对象,为了将对象的创建和使用相分离,采用工厂模式,即应用程序将对象的创建及初始化职责交给工厂对象.
一般情况下,应用程序有自己的工厂对象来创建bean.如果将应用程序自己的工厂对象交给Spring管理,那么Spring管理的就不是普通的bean,而是工厂Bean.
调用getBean()方法,Spring返回的不是直接创建的Bean的实例,而是由工厂Bean创建的Bean实例.
一般在Spring中配置工厂Bean,有3中不同类型的工厂Bean的配置.
1.静态工厂
创建具体Bean实例的是静态方法
public class StaticFactoryBean{
    public staticInteger createRandom(){
       return newInteger(new Random().nextInt());
    }
}

将其纳入Spring容器来管理,需要通过factory-method指定静态方法名称
<bean id="random" class="example.chapter3.StaticFactoryBean" scope="prototype"      
        factory-method="createRandom"//createRandom方法必须是static的,才能找到             />

2.实例工厂
创建具体Bean实例的是实例,不是静态方法
publicclass InstanceFactoryBean {
    privateString format = "yy-MM-dd HH:mm:ss";
    publicvoid setFormat(String format) {    this.format = format;  }
    publicString createTime() {   return new SimpleDateFormat(format).format(new Date());  }
}


配置文件需要配置两个bean:第一个Bean和普通的Bean没有区别,第二个bean定义如何通过工厂Bean获取Bean,需要指定工厂Bean的名称和方法名称
<bean id="instanceFactoryBean"class="example.chapter3.InstanceFactoryBean"><property name="format" value="yyyy-MM-dd HH:mm:ss"/></bean>
<bean id="currentTime"factory-bean="instanceFactoryBean"factory-method="createTime"/>

3.实现FactoryBean接口
publicclass PiFactoryBean implements FactoryBean {
    publicObject getObject() throws Exception {  return new Double(3.14159265358979);  }
    publicClass getObjectType() {  return Double.class;  }
    publicboolean isSingleton() {  return true;  }
}
实现了FactoryBean接口的Bean,不再被视为普通的Bean.Spring会自动检测.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章