•Spring 中有两种类型的Bean,一种是普通Bean,另一种是工厂Bean,即FactoryBean.
•工厂 Bean 跟普通Bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂Bean的getObject方法所返回的对象
简单案例:
Bean类:Car.java
/*
* 文件名:Car.java
* 版权:Copyright by www.huawei.com
* 描述:
* 修改人:Cuigaochong
* 修改时间:2015-10-27
* 跟踪单号:
* 修改单号:
* 修改内容:
*/
package com.cgc.spring.beans.factorybean;
/**
* <一句话功能简述>
* <功能详细描述>
*
* @author 姓名 工号
* @version [版本号, 2015-10-27]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class Car
{
public Car()
{
System.out.println("Car construct");
}
private String brand;
private double price;
public Car(String brand, double price)
{
super();
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;
}
}
CarFactoryBean.java
/*
* 文件名:CarFactoryBean.java
* 版权:Copyright by www.huawei.com
* 描述:
* 修改人:Cuigaochong
* 修改时间:2015-10-28
* 跟踪单号:
* 修改单号:
* 修改内容:
*/
package com.cgc.spring.beans.factorybean;
import org.springframework.beans.factory.FactoryBean;
/**
* <一句话功能简述>
* <功能详细描述>
*
* @author 姓名 工号
* @version [版本号, 2015-10-28]
* @see [相关类/方法]
* @since [产品/模块版本]
*/
public class CarFactoryBean implements FactoryBean<Car>
{
private String brand;
/**
* 设置 brand
* @param 对brand进行赋值
*/
public void setBrand(String brand)
{
this.brand = brand;
}
/**
* 重载方法 返回bean的对象
* @return
* @throws Exception
*/
@Override
public Car getObject()
throws Exception
{
// TODO Auto-generated method stub
return new Car(brand ,50000);
}
/**
* 重载方法 返回bean的类型
* @return
*/
@Override
public Class<?> getObjectType()
{
// TODO Auto-generated method stub
return Car.class;
}
/**
* 重载方法
* @return
*/
@Override
public boolean isSingleton()
{
// TODO Auto-generated method stub
return true;
}
}
applicationContext_Factorybean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<!--
通过Factory来配置Bean的实例
class:指向FactoryBean的全类名
property:配置FactoryBean的属性
但实际返回的却是FactoryBean的getObejct()方法返回的实例
-->
<bean id="car" class="com.cgc.spring.beans.factorybean.CarFactoryBean">
<property name="brand" value="BMW"></property>
</bean>
</beans>