2021-04-02

Java工厂模式解耦 —— 理解Spring IOC         

package com.ithonor.dao;

/**
 * 账户持久层接口
 * */
public interface IAccountDao {
    void saveAccount();
}
package com.ithonor.service;

/**
 * 账户业务层的接口
 * */
public interface IAccountService {
    /**
     * 模拟保存账户
     * */
    void saveAccount();
}
package com.ithonor.dao.impl;

import com.ithonor.dao.IAccountDao;
/**
 * 账户持久层实现类
 * */
public class AccountDaoImpl implements IAccountDao{
    public void saveAccount() {
        System.out.println("保存成功!");
    }
}
package com.ithonor.service.impl;

import com.ithonor.dao.IAccountDao;
import com.ithonor.factory.BeanFactory;
import com.ithonor.service.IAccountService;

/**
 * 账户的业务层实现类
 * */
public class AccountServiceImpl implements IAccountService {
//    业务层要调用持久层
    private IAccountDao accountDao ;
    public void saveAccount() {
        accountDao = (IAccountDao) BeanFactory.getBean("accountDao");
        accountDao.saveAccount();
    }

}
package com.ithonor.factory;

import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class BeanFactory {

    private static Properties properties;
    //定义一个Map,用于存放我们创建的对象,把他称为容器
    private static Map<String,Object> beans;
    static{
            properties = new Properties();
        try {
            properties = new Properties();
            InputStream inputStream =
                    BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
            properties.load(inputStream);
            //实例化容器
            beans = new HashMap<String,Object>();
            //取出配置文件中所有的key
            Enumeration keys = properties.keys();
            //遍历枚举
            while (keys.hasMoreElements()){
                //获取每个key
                String key = keys.nextElement().toString();
                //根据key获取value
                String beanPath = properties.getProperty(key);
                //反射创建对象
                Object value = Class.forName(beanPath).getDeclaredConstructor().newInstance();
                //把key和value放入容器中
                beans.put(key,value);
                System.out.println(value);
                System.out.println(beans);
            }
        } catch (Exception e) {
            new ExceptionInInitializerError("初始化Properties失败。。。");
        }finally {
//            System.out.println(beans);
        }
    }

    //根据Bean的名称获取Bean对象
    public static Object getBean(String beanName){
        return  beans.get(beanName);
    }
}
package com.ithonor.ui;

import com.ithonor.factory.BeanFactory;
import com.ithonor.service.IAccountService;

public class Client {

        public static void main(String[] args) {

            IAccountService service = (IAccountService) BeanFactory.getBean("accountService");
            service.saveAccount();
        }
    }


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

注意事项:AccountServiceImpl实现时候,初始化需要在saveAccount中定义,避免NullPointerException异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值