Spring-11:通过FactoryBean配置Bean

来源:互联网 发布:国税局在线发票软件 编辑:程序博客网 时间:2024/05/16 02:03
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;}@Overridepublic 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的实例@Overridepublic Car getObject() throws Exception {Car car = new Car(brand, 500000);return car;}//返回bean的类型@Overridepublic Class<?> getObjectType() {// TODO Auto-generated method stubreturn Car.class;}//实例是否为单列,是,则返回true,否则返回false@Overridepublic boolean isSingleton() {// TODO Auto-generated method stubreturn 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,打印输出如下:



0 0