13、(知識篇)Spring使用xml配置bean02

//1、通過靜態工廠方法配置bean
//在配置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);
	}

}



通過Spring的FactoryBean獲取bean類:
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>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章