码迷,mamicode.com
首页 > 编程语言 > 详细

自己实现spring容器创建

时间:2020-04-25 16:49:57      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:image   ror   反射   bean   client   win   stream   文件中   except   

场景:对账户信息进行操作

步骤

  1. 首先,持久化层操作
public interface AccountDao {
    void saveAccount();
}

新增一个账户信息,持久化层操作实现类

public class AccountDaoImpl implements AccountDao {
    @Override
    public void saveAccount() {
        System.out.println("保存账户成功");
    }
}
  1. 业务层操作
public interface AccountService {
    void saveAccount();
}

业务层操作实现类

public class AccountServiceImpl implements AccountService {
    private AccountDao accountDao = (AccountDao) BeanFactory.getBean("accountDao");
    @Override
    public void saveAccount() {
        accountDao.saveAccount();
    }
}

这里,我们通过自己定义对BeanFactory来创建bean
3. 创建配置文件

accountService=com.lf.test.service.impl.AccountServiceImpl
accountDao=com.lf.test.dao.impl.AccountDaoImpl
  1. BeanFactory实现
/**
 *
 * 一个创建Bean对象的工厂
 *
 * JavaBean:使用java编写的可重用组件
 *
 * 创建Service和Dao对象
 *
 * 第一步:需要配置文件来配置我们的service和dao
 *          * 配置内容:唯一标识 -> 全限定类名(key -> value)
 *
 * 第二步:读取配置文件中配置的内容,反射创建对象
 *
 * 配置文件可以是xml也可以是properties
 *
 */
public class BeanFactory {
    // 定义一个properties
    private static Properties properties;
    // 定义一个map,存放要创建的对象,称为容器
    private static Map<String, Object> beans;
    // 使用静态代码块为Properties对象赋值
    static {
        try {
            // 实例化对象
            properties = new Properties();
            // 获取properties文件的流对象
            InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
            properties.load(in);
            beans = new HashMap<>();
            // 取出配置文件中所有的bean
            Enumeration keys = properties.keys();
            // 遍历keys
            while (keys.hasMoreElements()) {
                String key = keys.nextElement().toString();
                String beanPath = properties.getProperty(key);
                Object value = Class.forName(beanPath).newInstance();
                beans.put(key, value);
            }
        } catch (Exception e) {
            throw new ExceptionInInitializerError("初始化properties失败");
        }
    }
    // 根据bean的名称,获取值
    public static Object getBean(String beanName) {
        return beans.get(beanName);
    }
}
  1. 测试
public class TestClient {
    public static void main(String[] args) {
        AccountService accountService = (AccountService) BeanFactory.getBean("accountService");
        accountService.saveAccount();
    }
}

结果:
技术图片

自己实现spring容器创建

标签:image   ror   反射   bean   client   win   stream   文件中   except   

原文地址:https://www.cnblogs.com/liufei-yes/p/12773575.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!