工廠bean和bean工廠
FactoryBean(工廠bean):是bean的加工工廠,是對已知bean的加工,是一個介面,要實現三個方法:
1.Object getObject()可以對bean進行加工新增功能。
2.Class getObjectType()。
3.Boolean isSingleton()。
Bf.getBean(“ab”)只是得到MyFactory.getObject()的object物件,所以最後要強轉。
BeanFactory bean工廠就是生產bean的工廠,注入:由於Spring Ioc容器以框架的方式提供了工廠方法的功能,並以透明的方式給開發者,不過在一些遺留系統或第三方類庫中,我們還會碰到工廠方法,這時使用者可以使用Spring工廠方法注入的方式進行配置。
靜態工廠類方法都是靜態的,這意味著使用者在無需建立工廠類實力的情況下就可以呼叫工廠類方法。因此靜態工廠方法比非靜態工廠方法的呼叫更加方便。我們將carFactory類的getCar()方法調整為靜態的然後再Spring配置如下:
<bean id=“car” class=“carFactory” factory-method=“getCar”/>
使用者直接通過class屬性指定工廠類,然後再通過factory-method指定對應的靜態工廠方法建立bean。如果靜態工廠方法需要引數則用<p:constructor-arg index=“1” value=“calendar”></p:constructor-arg>傳入例項工廠方法:
有些工廠是非靜態的,即必須是例項化工廠類才能呼叫工廠方法。
下面是一個例項化工廠類CarFactory類來為Car提供的例項:
package com.car;
public class CarFactory{
public Car getCar(){
return new Car();
}
}
工廠類負責建立一個或多個目標類例項。工廠類方法一般以介面或抽象類變數的形式返回目標類。工廠類對外遮蔽了目標類的例項化步驟。呼叫甚至不知道如何具體的目標類是什麼。
下面我們在Spring配置檔案中進行配置
<bean id="carFactory" class="com.CarFactory"/>
<bean id="car" factory-bean="carFactory" factory-method="getCar"/>
factory-bean="carFactory"指定了工廠類Bean,
factory-method="getCar"指定了工廠類Bean建立該Bean的工廠方法。
和靜態工廠類似如果工廠方法需要引數則用
<p:constructor-arg index=“0” value=“calendar”></p:constructor-arg>