1. 程式人生 > >spring xml 配置 工廠注入

spring xml 配置 工廠注入

請注意,是通過工廠注入bean,而不是注入工廠。

applicationContext.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"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
	<!-- 靜態工廠 -->
	<bean id="person" class="tang.StaticFactory" factory-method="getPerson">
		<constructor-arg name="name" value="tangxiansheng"></constructor-arg>
		<constructor-arg name="age" value="19"></constructor-arg>
	</bean>
	<!-- 例項工廠 -->
	<bean id="instanceFactory" class="tang.InstanceFactory"></bean>
	<!-- 引用例項工廠 factory-bean指定例項工廠,factory-method指定工廠中方法 -->
	<bean id="person1" class="tang.Person" factory-bean="instanceFactory" factory-method="getPerson">
		<constructor-arg name="name" value="tangmouren"></constructor-arg>
		<constructor-arg name="age" value="20"></constructor-arg>
	</bean>
</beans>
TestClass

public static void main(String[] args){
		ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
		Person person = ac.getBean("person",Person.class);
		System.out.println(person);
		Person person1 = ac.getBean("person1",Person.class);
		System.out.println(person1);
	}

class bean

例項工廠

package tang;

public class InstanceFactory {
	public Person getPerson(String name, Integer age){
		return new Person(name, age);
	}
}

靜態工廠

package tang;

public class StaticFactory {
	public static Person getPerson(String name,Integer age){
		return new Person(name,age);
	}
}

實體

package tang;
public class Person {
	private String name;
	private Integer age;
	public Person() {
		System.out.println("person");
	}
	public Person(String name, Integer age) {
		super();
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}
	
}
輸出

Person [name=tangxiansheng, age=19, car=null]
Person [name=tangmouren, age=20, car=null]