FactoryBean
Spring中有两种类型的bean,一种是普通bean,另一种是工厂bean,即FactoryBean。工厂bean跟普通bean不同,其返回的对象不是指定类的一个实例,其返回的是该工厂bean的getObject方法所返回的对象。
示例:
1.项目目录
2.Car.java
package com.atguigu.spring.factorybean;
public class Car {
private String brand;
private Double price;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", price=" + price + "]";
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}
3.MyFactory.java
package com.atguigu.spring.factorybean;
import org.springframework.beans.factory.FactoryBean;
public class MyFactory implements FactoryBean<Car>{
@Override
public Car getObject() throws Exception {
Car car = new Car();
car.setBrand("奥迪");
car.setPrice(200000.0);
return car;
}
@Override
public Class<?> getObjectType() {
return Car.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
4.factory-bean.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 工厂bean -->
<bean id="factory" class="com.atguigu.spring.factorybean.MyFactory"></bean>
</beans>
5.Test.java
package com.atguigu.spring.factorybean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ac = new ClassPathXmlApplicationContext("factory-bean.xml");
Object bean = ac.getBean("factory");
System.out.println(bean);
}
}
6.运行结果
Car [brand=奥迪, price=200000.0]