在前面的两篇文章中我们介绍了Spring通过反射的机制注入,和静态的工厂两种方式的注入,在这一篇文章中我们用实例工厂的注入发放来实现创建对象
首先我们还是需要有一个实体类:
package com.wdg.domain;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
实例工厂和静态工厂的区别在于,静态的工厂是在java代码里面来创建实例对象,但是实例工厂是在配置文件中给对象进行赋值
我们需要创建一个实例工厂:
package com.wdg.test;
import java.util.HashMap;
import java.util.Map;
import com.wdg.domain.Person;
public class PersonInstanceFactory {
private Map<Integer, Person> map = new HashMap<Integer, Person>();
public void setMap(Map<Integer, Person> map) {
this.map = map;
}
public PersonInstanceFactory() {
}
public Person getPerson(int id) {
return map.get(id);
}
}
上面就是创建了一个实例的工厂,我们接下来要做的就是写配置文件,前面说了实例工厂和静态工厂的区别在于,实例工厂是在配置文件中给对象进行赋值。
<?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 id="PersonFactory" class="com.wdg.test.PersonInstanceFactory">
<property name="map">
<map>
<entry key="4">
<bean class="com.wdg.domain.Person">
<property name="age" value="4"></property>
<property name="name" value="Honda"></property>
</bean>
</entry>
<entry key="6">
<bean class="com.wdg.domain.Person">
<property name="age" value="6"></property>
<property name="name" value="ford"></property>
</bean>
</entry>
</map>
</property>
</bean>
<bean id="person" factory-bean="PersonFactory" factory-method="getPerson">
<constructor-arg value="4"></constructor-arg>
</bean>
<bean id="person" factory-bean="PersonFactory" factory-method="getPerson">
<constructor-arg value="6"></constructor-arg>
</bean>
</beans>
然后我们运行:
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("spring-beans.xml");
Person person = (Person) ctx.getBean("person");
System.out.println(person);
}
输出结果:Person [name=Honda, age=4]
上面就是我们实例工厂的模式来注入实体类了,希望对你有所帮助。如果感觉好,就扫下面的红包吧,哈哈感谢
祝生活愉快