欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring-day01-1学习笔记使用工厂模式解耦

程序员文章站 2022-05-08 10:56:27
...

一.在resource目录下创建一个bean.properties配置文件,里面存放key=value形式的数据,右边是全限定类名

accountService=com.itheima.service.impl.AccountServiceImpl
accountDao=com.itheima.dao.impl.AccountDaoImpl

二.创建一个BeanFactory工厂:

一个创建Bean对象的工厂

Bean:在计算机英语中,有可重用组件的含义。
JavaBean:用java语言编写的可重用组件。
javabean > 实体类
它就是创建我们的service和dao对象的。

第一个:需要一个配置文件来配置我们的service和dao
配置的内容:唯一标识=全限定类名(key=value)
第二个:通过读取配置文件中配置的内容,反射创建对象
(我的配置文件可以是xml也可以是properties)

public class BeanFactory {
    //定义一个Properties对象
    private static Properties props;

    //定义一个Map,用于存放我们要创建的对象。我们把它称之为容器
    private static Map<String,Object> beans;

    //使用静态代码块为Properties对象赋值
    static {
        try {
            //实例化对象
            props = new Properties();
            //获取properties文件的流对象
            InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
            props.load(in);
            //实例化容器
            beans = new HashMap<String,Object>();
            //取出配置文件中所有的Key
            Enumeration keys = props.keys();
            //遍历枚举
            while (keys.hasMoreElements()){
                //取出每个Key,使用toString()方法获取到真实的名称
                //才能传入getProperties方法得到beanPath
                String key = keys.nextElement().toString();
                //根据key获取value
                String beanPath = props.getProperty(key);
                //反射创建对象
                Object value = Class.forName(beanPath).newInstance();
                //把key和value存入容器中
                beans.put(key,value);
            }
        }catch(Exception e){
            throw new ExceptionInInitializerError("初始化properties失败!");
        }
    }

    /**
     * 根据bean的名称获取对象
     * @param beanName
     * @return
     */
    public static Object getBean(String beanName){
        return beans.get(beanName);
    }

里面使用map来存放要获取的对象,在每次类加载时把key和value都放入map中,以实现单例模式的功能,提高效率

使用了beanFactory后创建对象是这种格式了,通过工厂来获取需要的资源:
spring-day01-1学习笔记使用工厂模式解耦