这个FactoryBean是Spring提供的,它有三个方法(如下):
其中,getObject():返回Bean本身;
getObjectType():返回Bean的实例;
isSingleton():返回这个Bean是不是单例的。
beans-beanfactory.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <!-- 8 通过FactoryBean来配置bean的实例 9 class:指向FactoryBean的全类名 10 property:配置FactoryBean的属性 11 12 但实际返回的是实例却是FactoryBean的getObject()方法返回的实例! 13 --> 14 <bean id="car" class="com.hk.beans.factorybean.CarFactoryBean"> 15 <property name="brand" value="BMW"></property> 16 </bean> 17 </beans>
CarFactoryBean.java:
1 package com.hk.beans.factorybean; 2 3 import org.springframework.beans.factory.FactoryBean; 4 5 //自定义FactoryBean 需要实现Spring提供的接口 6 public class CarFactoryBean implements FactoryBean<Car>{ 7 private String brand; 8 public void setBrand(String brand) { 9 this.brand = brand; 10 } 11 //返回bean的对象 12 @Override 13 public Car getObject() throws Exception { 14 return new Car(brand,600000); 15 } 16 17 //返回bean的类型 18 @Override 19 public Class<?> getObjectType() { 20 return Car.class; 21 } 22 23 @Override 24 public boolean isSingleton() { 25 return true; 26 } 27 }
运行结果: