一般情况下,我们spring采用反射来实例化对象,可是spring也提供了另一种方式,既通过实现FactoryBean来描述bean的实例化过程。
FactoryBean的描述
public interface FactoryBean<T> {
T getObject() throws Exception;
Class<?> getObjectType();
boolean isSingleton();
}
接口描述很简单
获取bean, 获取bean的类型, 是否是单例
FactoryBean的使用
public class Car {
private int maxSpeed;
private String brand;
private double price;
public int getMaxSpeed() {
return maxSpeed;
}
public void setMaxSpeed(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
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;
}
}
public class CarFactoryBean implements FactoryBean<Car> {
@Override
public Car getObject() throws Exception {
return new Car();
}
@Override
public Class<?> getObjectType() {
return Car.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
之后我们就可以把CarFactoryBean定义到到容器中就可以获取对应car的单例了
若是想获取CarFacotryBean本身需要在通过name访问时在name前面加上&, 如下
CarFacotryBean foctorybean = (CarFactoryBean)getBean("&car");