首页 > 其他 > 详细

5.1FactoryBean的使用

时间:2021-01-13 17:48:02      阅读:24      评论:0      收藏:0      [点我收藏+]
一般情况下,Spring通过反射机制利用bean的class属性指定实现类来实例化bean。在某些情况下,实例化bean的过程比较复杂,如果按照传统的方式,则需要在<bean>中提供大量的配置信息。配置方式的灵活性是受限的,Spring为此提供了一个org.SpringFramwork.bean.factory.Factory的工厂类接口,用户可以通过实现该接口定制实例化bean的逻辑。
FactoryBean接口定义了3个方法:
  • T getObject():返回有FactoryBean创建的bean实例,如果isSingleton返回true,则该实例会放到Spring容器中单实例缓存池中。
  • boolean isSingleton():返回有FactoryBean创建的bean实例的作用域是singleton还是prototype。
  • class<T> getObjectType():返回FactoryBean创建的bean类型。
当配置文件中<bean>的class属性配置的实现类FactoryBean时,通过getBean()方法返回的不是FactoryBean本身,而是FactoryBean#getObject()方法所返回的对象,相当于FactoryBean#getObject()代理了getBean方法。
示例:
public class Car{
 	private int maxSpeed;
    private String brand;
    private double price;
}

public class CarFactoryBean implements FactoryBean<Car>{
 	private String carInfo;
    public Car getObject() throw Exception{
        Car car = new Car();
        String[] infos = carInfo.split(",");
        car.setBrand(infos[0]);
        car.setMaxSpeed(infos[1]);
        car.setprice(Double.valueOf(infos[2]));
        return car;
    }
    public Class<T> getObjectType(){
    	return Car.class;    
    }
    public boolean isSingleton(){
     	return false;   
    }
    public String getCarInfo(){
     	return this.carInfo; 
    }
    public void setCarInfo(String carInfo){
     	this.carInfo = carInfo;   
    }
}

XML配置
<bean id="car" class="CarFactoryBean" carInfo="保时捷,218,1280000"></bean>
当调用getBean("car")时,Spring通过反射机制发现CarFactory实现了FactoryBean的接口,这时Spring容器就调用接口方法CarFactoryBean#getObject()返回。如果希望获取CarFactoryBean的实例,则需要使用getBean(beanName)方法时在beanName前加"&".




5.1FactoryBean的使用

原文:https://www.cnblogs.com/-shing/p/a5e05e1357f964cbd9b31304def47040.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!