静态工厂方法配置bean
1、属性:
class : 指向静态工厂方法的全类名
factory-method : 指向静态工厂方法
constructor-arg: 用来配置工厂方法需要传入的参数值
2、使用步骤:
(1)创建静态工厂方法类
(2)创建工厂方法
(3)在静态工厂方法类中添加静态代码块并且初始化
(4)配置静态工厂方法bean
(5)调用bean
3、注意事项:配置Info类的bean实例,不是配置静态工厂方法StaticFactoryMethod类的实例
4、作用:
调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节
实例工厂方法配置bean
1、属性:
factory-bean : 指向实体工厂方法的bean
factory-method : 指向实体工厂方法的名字
constructor-arg : 用来配置工厂方法需要传入的参数值
2、使用步骤:
(1)创建实例工厂类
(2)创建实例工厂方法
(3)通过构造函数初始化
(4)配置实例工厂实例
(5)通过实例工厂方法配置bean
(6)调用bean
3、作用:
将对象的创建过程封装到另外一个对象实例的方法里. 当客户端需要请求对象时, 只需要简单的调用该实例方法而不需要关心对象的创建细节
1、文件
①TestFactoryMethod.java:测试类
②Info.java:数据模型
③StaticFactoryMethod.java:静态工厂方法类
④InstanceFactoryMethod.java:实例工厂方法类
⑤factoryMethodContext.xml:配置文件
2、TestFactoryMethod.java
package com.demo.sshtest.factorymethod;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestFactoryMethod {
public static void main(String[] args) {
staticFactoryMethod();
}
public static void staticFactoryMethod(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("factoryMethodContext.xml");
Info info = (Info)applicationContext.getBean("staticinfos");
System.out.println(info);
Info info2 = (Info)applicationContext.getBean("infos");
System.out.println(info2);
}
}
3、Info.java
package com.demo.sshtest.factorymethod;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestFactoryMethod {
public static void main(String[] args) {
staticFactoryMethod();
}
public static void staticFactoryMethod(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("factoryMethodContext.xml");
Info info = (Info)applicationContext.getBean("staticinfos");
System.out.println(info);
Info info2 = (Info)applicationContext.getBean("infos");
System.out.println(info2);
}
}
4、StaticFactoryMethod.java
package com.demo.sshtest.factorymethod;
import java.util.HashMap;
import java.util.Map;
public class StaticFactoryMethod {
//静态工厂方法:直接调用某一个雷的静态方法返回bean实例
private static Map<String,Info>infos = new HashMap<String,Info>();
static{
infos.put("info1", new Info(1,"Info1"));
infos.put("info2", new Info(2,"Info2"));
}
public static Info getInfos(String key) {
return infos.get(key);
}
}
5、InstanceFactoryMethod.java
package com.demo.sshtest.factorymethod;
import java.util.HashMap;
import java.util.Map;
public class InstanceFactoryMethod {
//实例工厂方法:实例工厂的方法,即先要创建工厂,再调用工厂实例方法getInfo()来返回bean实例
private Map<String, Info>infoMap = null;
public InstanceFactoryMethod(){
infoMap = new HashMap<String,Info>();
infoMap.put("info1", new Info(1,"info1"));
infoMap.put("info2", new Info(2,"info2"));
}
public Info getInfo(String key){
return infoMap.get(key);
}
}
6、factoryMethodContext.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 -->
<!--
1、属性:
class : 指向静态工厂方法的全类名
factory-method : 指向静态工厂方法
constructor-arg: 用来配置工厂方法需要传入的参数值
2、使用步骤:
(1)创建静态工厂方法类
(2)创建工厂方法
(3)在静态工厂方法类中添加静态代码块并且初始化
(4)配置静态工厂方法bean
(5)调用bean
3、注意事项:配置Info类的bean实例,不是配置静态工厂方法StaticFactoryMethod类的实例
-->
<bean id="staticinfos" class="com.demo.sshtest.factorymethod.StaticFactoryMethod" factory-method="getInfos">
<constructor-arg value="info2"></constructor-arg>
</bean>
<!-- 实例工厂方法配置bean -->
<!--
1、属性:
factory-bean : 指向实体工厂方法的bean
factory-method : 指向实体工厂方法的名字
constructor-arg : 用来配置工厂方法需要传入的参数值
2、使用步骤:
(1)创建实例工厂类
(2)创建实例工厂方法
(3)通过构造函数初始化
(4)配置实例工厂实例
(5)通过实例工厂方法配置bean
(6)调用bean
-->
<!-- 通过工厂实例 -->
<bean id="instanceinfos" class="com.demo.sshtest.factorymethod.InstanceFactoryMethod"></bean>
<!-- 通过实例工厂方法配置bean -->
<bean id="infos" factory-bean="instanceinfos" factory-method="getInfo">
<constructor-arg value="info1"></constructor-arg>
</bean>
</beans>
7、项目目录
8、demo
https://download.csdn.net/download/qq_22778717/10475154