您的位置:首页 > 编程语言 > Java开发

Spring 通过FactoryBean来配置bean

2017-06-17 14:02 465 查看

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()方法的对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring