您的位置:首页 > 编程语言 > Java开发

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

2016-12-10 20:33 288 查看
//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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息