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

Spring-11:通过FactoryBean配置Bean

2016-07-20 15:45 507 查看
Spring 中有两种类型的 Bean, 一种是普通Bean, 另一种是工厂Bean, 即FactoryBean.。
工厂 Bean 跟普通Bean不同, 其返回的对象不是指定类的一个实例, 其返回的是该工厂 Bean 的 getObject 方法所返回的对象

使用FactoryBean需要实现FactoryBean接口,并重写其中的三个方法:



示例:
先创建一个Car类:
package com.atguigu.spring.beans.factorybean;

public class Car {
private String brand;
private double price;
Car(String brand, double price) {
this.brand = brand;
this.price = price;
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", price=" + price + "]";
}

}
然后创建用于产生Car实例的工厂Bean,并实现  org.springframework.beans.factory.FactoryBean  接口:
package com.atguigu.spring.beans.factorybean;

import org.springframework.beans.factory.FactoryBean;

public class CarFactoryBean implements FactoryBean<Car> {

private String brand;

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

//返回bean的实例
@Override
public Car getObject() throws Exception {
Car car = new Car(brand, 500000);
return car;
}

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

//实例是否为单列,是,则返回true,否则返回false
@Override
public boolean isSingleton() {
// TODO Auto-generated method stub
return true;
}

}
在xml文件中配置:
<!--
通过 FactoryBean 来配置Bean的实例
class:指向FactoryBean的全类名
property:配置FactoryBean的属性

但是实际返回的实例是由 FactoryBean的getObject方法返回
-->
<bean id="car" class="com.atguigu.spring.beans.factorybean.CarFactoryBean">
<property name="brand" value="BMW"></property>
</bean>


在main方法中获取car bean,打印输出如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息