Spring 通過FactoryBean來配置bean
阿新 • • 發佈:2018-11-30
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()方法的物件。