Crie o Bean chamando o método de fábrica da instância
Método de fábrica da instância: o processo de criação do objeto é encapsulado em outro método de instância do objeto.Quando o cliente precisa solicitar um objeto, ele só precisa chamar o método da instância sem se preocupar com os detalhes da criação do objeto.
Para declarar Bean criado pelo método factory da instância
Especifique o bean que possui o método factory no atributo factory-bean do bean
Especifique o nome do método de fábrica no atributo de método de fábrica
Use elementos construtor-arg para passar parâmetros de método para métodos de fábrica
<?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
factroy-bean: 指定工厂bean
factroy-method:指定实例工厂方法.
-->
<bean id="iof" class="com.learn.spring.factory.InstanceObjectFactory"></bean>
<bean id="car1" factory-bean="iof" factory-method="getCar">
<constructor-arg value="bmw"></constructor-arg>
</bean>
</beans>
package com.learn.spring.factory;
import java.util.HashMap;
import java.util.Map;
import com.learn.spring.autowire.Car;
/**
* 获取Car对象的工厂.
* InstanceObjectFactory iof = new InstanceObjectFactory();
*
* Car car = iof.getCar("bmw");
*/
public class InstanceObjectFactory {
private Map<String,Car> cars = new HashMap<String,Car>();
public InstanceObjectFactory(){
cars.put("audi", new Car("Audi", 450000));
cars.put("bmw", new Car("bmw",550000));
}
/**
* 实例工厂方法
*/
public Car getCar(String carName){
return cars.get(carName);
}
}
package com.learn.spring.factory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.learn.spring.autowire.Car;
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx =
new ClassPathXmlApplicationContext("spring-factory.xml");
Car car1 =(Car) ctx.getBean("car1");
System.out.println(car1);
}
}