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會自動檢測.

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