1.car 类
package com.hxzy.factorybean;
public class Car {
private String brand;
private String address;
public void setBrand(String brand) {
this.brand = brand;
}
public void setAddress(String address) {
this.address = address;
}
public Car() {
}
public Car(String brand, String address) {
super();
this.brand = brand;
this.address = address;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", address=" + address + "]";
}
}
2.自定义工厂类
package com.hxzy.factorybean;
import org.springframework.beans.factory.FactoryBean;
//自定义的工厂bean需要实现factorybean接口
public class CarFactoryBean implements FactoryBean<Car>{
private String brand;
public void setBrand(String brand) {
this.brand = brand;
}
@Override
public Car getObject() throws Exception {
return new Car("jac", "合肥");
}
@Override
public Class<?> getObjectType() {
return Car.class;
}
@Override
public boolean isSingleton() {
return true;
}
}
3.bean 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 通过FactoryBean来配置bean的实例
class 指向FactoryBean的全类名
property : 配置 FactoryBean的属性
但实际返回的实例却是FactoryBean的getObject()方法返回的实例-->
<bean id="car" class="com.hxzy.factorybean.CarFactoryBean">
<property name="brand" value="jac"></property>
</bean>
</beans>
4.测试类
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beanfactory.xml");
Car car = (Car) ctx.getBean("car");
System.out.println(car);
ctx.close();