//在配置bean中使用factory-method 指定靜態方法,返回指定的bean(用constructor-arg指定參數)
//<bean id="factorystatic" class="com.spring.bean.FactoryStatic" factory-method="getPerson">
//2、用實例工廠方法配置bean
//2.1首先配置工廠bean<bean id="factoryinstance" class="com.spring.bean.FactoryInstance"></bean>
//2.2創建bean 通過factory-bean指定工廠、通過factory-method指定工廠方法(用constructor-arg指定參數)
//<bean id="person" factory-bean="factoryinstance" factory-method="getPerson">
//3、通過FactoryBean返回Bean
//衹需要繼承類FactoryBean即可
//測試類
package com.spring.text;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.spring.bean.Person;
public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//1、通過靜態工廠方法配置bean
//在配置bean中使用factory-method 指定靜態方法,返回指定的bean(用constructor-arg指定參數)
//<bean id="factorystatic" class="com.spring.bean.FactoryStatic" factory-method="getPerson">
Person person = (Person) ctx.getBean("factorystatic");
System.out.println(person);
//2、用實例工廠方法配置bean
//2.1首先配置工廠bean<bean id="factoryinstance" class="com.spring.bean.FactoryInstance"></bean>
//2.2創建bean 通過factory-bean指定工廠、通過factory-method指定工廠方法(用constructor-arg指定參數)
//<bean id="person" factory-bean="factoryinstance" factory-method="getPerson">
Person person2 = (Person) ctx.getBean("person");
System.out.println(person2);
//3、通過FactoryBean返回Bean
//衹需要繼承類FactoryBean即可
Person person3 = (Person) ctx.getBean("factoryPerson");
System.out.println(person3);
}
}
Bean部分:
Person類
package com.spring.bean;
public class Person {
private String name;
private int age;
public Person() {
super();
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
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 + "]";
}
}
靜態工廠模式獲取bean類
package com.spring.bean;
import java.util.HashMap;
import java.util.Map;
public class FactoryStatic {
private static Map<Integer, Person> persons = new HashMap<>();
static {
persons.put(1, new Person("超人", 20));
persons.put(2, new Person("綠燈俠", 23));
persons.put(3, new Person("閃電俠", 18));
}
public static Person getPerson(int index) {
return persons.get(index);
}
}
實例工廠獲取bean類
package com.spring.bean;
import java.util.HashMap;
import java.util.Map;
public class FactoryInstance {
private static Map<Integer, Person> persons = new HashMap<>();
public FactoryInstance() {
super();
// TODO Auto-generated constructor stub
persons.put(1, new Person("超人", 20));
persons.put(2, new Person("綠燈俠", 23));
persons.put(3, new Person("閃電俠", 18));
}
public Person getPerson(int index) {
return persons.get(index);
}
}
package com.spring.bean;
import org.springframework.beans.factory.FactoryBean;
public class FactoryPerson implements FactoryBean<Person> {
@Override
public Person getObject() throws Exception {
// TODO Auto-generated method stub
return new Person("超人",20);
}
@Override
public Class<?> getObjectType() {
// TODO Auto-generated method stub
return Person.class;
}
@Override
public boolean isSingleton() {
// TODO Auto-generated method stub
return false;
}
}
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 通過靜態工廠獲取bean -->
<bean id="factorystatic" class="com.spring.bean.FactoryStatic" factory-method="getPerson">
<constructor-arg name="index" value="2"></constructor-arg>
</bean>
<!-- 通過實例工廠獲取bean -->
<bean id="factoryinstance" class="com.spring.bean.FactoryInstance"></bean>
<bean id="person" factory-bean="factoryinstance" factory-method="getPerson">
<constructor-arg name="index" value="3"></constructor-arg>
</bean>
<!-- 通過FactoryBean獲取bean -->
<bean id="factoryPerson" class="com.spring.bean.FactoryPerson"></bean>
</beans>