1. 程式人生 > >Spring 通過FactoryBean來配置bean

Spring 通過FactoryBean來配置bean

Spring 通過FactoryBean來配置bean

標籤(空格分隔): Spring


除了之前全類名和工廠方法這兩種形式來配置bean之外,還可以使用FactoryBean的形式來配置bean。下面是一個例子:
首先先定義一個類,實現了actoryBean這個介面:
public class CarFactoryBean implements FactoryBean{

private String brand;

public String getBrand() {
    return brand;
}

public void setBrand(String brand) {
    this.brand = brand;
}

@Override
public Car getObject() throws Exception {
    // TODO Auto-generated method stub
    return new Car("BMW",500000);
}

@Override
public Class<?> getObjectType() {
    // TODO Auto-generated method stub
    return Car.class;
}

@Override
public boolean isSingleton() {
    // TODO Auto-generated method stub
    return true;
}

}

當spring容器根據配置檔案來生成bean的時候,這個bean的例項就是由getObject()這個方法來返回的,所以本例子中返回的bean例項就是new Car(“BMW”,500000)。
getObjectType()方法返回的是bean的型別,isSingleton()方法返回這個bean是否為單例。
下面是具體的配置檔案:



配置檔案中雖然為bean例項注入了屬性brand的值為AUDI,但是CarFactoryBean的getObject方法最終返回的bean例項是BWM,所以main方法中的結果仍然為BWM。下面是main方法:
ApplicationContext ctx=new ClassPathXmlApplicationContext(“beans-beanfactory.xml”);
Car car=(Car)ctx.getBean(“car”);
System.out.println(car);
結果為:Car [name=BMW, price=500000]

由此可見普通全類名的配置和使用FactoryBean進行配置的區別:全類名建立後返回的bean例項是class屬性中的類的物件,而FactoryBean配置後,最終返回的bean例項未必是class屬性對應的那個類的物件,而是getObject()方法的物件。