SSH笔记-静态/实例工厂方法配置bean

静态工厂方法配置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、项目目录
项目目录

扫描二维码关注公众号,回复: 1639657 查看本文章

8、demo
https://download.csdn.net/download/qq_22778717/10475154

猜你喜欢

转载自blog.csdn.net/qq_22778717/article/details/80672257