[ * ] 靜態(tài)工程方法創(chuàng)建bean
[ * ] 實(shí)例工程方法創(chuàng)建bean
[ * ] spring的FactoryBean創(chuàng)建bean
靜態(tài)工程方法創(chuàng)建bean
直接用類的靜態(tài)方法就可以返回bean的實(shí)例
public class StaticCarFactory {
private static Map<String, Car> cars = new HashMap<String, Car>();
static {
cars.put("audi", new Car("audi", 20000));
cars.put("ford", new Car("ford", 40000));
}
public static Car getCar(String name) {
return cars.get(name);
}
}
<!-- 通過靜態(tài)工程方法配置bean
注意:不是配置靜態(tài)工程方法實(shí)例,而是配置bean實(shí)例
class 屬性:指向靜態(tài)工程方法全類名稱
factory-method: 指向靜態(tài)工程方法
constructor-arg:如果靜態(tài)工程方法需要傳入?yún)?shù)凤薛,這個(gè)使用constructor-arg: 配置參數(shù)
-->
<bean id="car1"
class="com.sunny.beans.factory.StaticCarFactory"
factory-method="getCar">
<constructor-arg name="name" value="audi"/>
</bean>
靜態(tài)工程方法創(chuàng)建bean
先創(chuàng)建工程本身声功,在調(diào)用工程的實(shí)例方法
public class InstanceCarFactory {
private static Map<String, Car> cars;
public InstanceCarFactory() {
cars = new HashMap<String, Car>();
cars.put("audi", new Car("audi", 20000));
cars.put("ford", new Car("ford", 40000));
}
public Car getCar(String name) {
return cars.get(name);
}
}
<!--通過實(shí)例的工程方法創(chuàng)建bean-->
<!--配置工程實(shí)例-->
<bean id="carFactory"
class="com.sunny.beans.factory.InstanceCarFactory"/>
<bean id="car2"
factory-bean="carFactory"
factory-method="getCar">
<constructor-arg name="name" value="ford"/>
</bean>
spring的FactoryBean創(chuàng)建bean
實(shí)現(xiàn)FactoryBean接口
public class CarFactoryBean implements FactoryBean<Car> {
private String brand;
public void setBrand(String brand) {
this.brand = brand;
}
/**
* @return bean對象
* @throws Exception 異常
*/
@Override
public Car getObject() throws Exception {
return new Car(brand, 40000);
}
/**
* @return bean的類型
*/
@Override
public Class<?> getObjectType() {
return Car.class;
}
/**
* @return 是否單例
*/
@Override
public boolean isSingleton() {
return true;
}
}
<bean id="car3"
class="com.sunny.beans.factory.CarFactoryBean">
<property name="brand" value="CarFactoryBean"/>
</bean>