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类:
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>
//在配置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>
相关文章推荐
- 微服务框架Spring Cloud介绍 Part2: Spring Cloud与微服务
- springmvc实现url路由功能
- spring aop 无法代理父类方法 的解决方法
- Spring MVC过滤器-超类 GenericFilterBean
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring AOP动态代理-切面
- 使用MVC微信支付返回get_brand_wcpay_request:fail
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 无线网卡安装DIY
- java 中Spring task定时任务的深入理解
- 模拟Spring的简单实现
- Spring整合WebSocket应用示例(上)
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解