自己动手开发IOC容器

前两天写简历,写了一句:精通Spring IoC容器。怎么个精通法?还是自己动手写个IOC容器吧。


什么是IoC(Inversion of Control)?什么是DI(Dependency Injection)?不多解释,自己Google!希望你先明确几个概念,该文章不做这方面的阐述,重点关注如何实现。我将用简要的语言从需求,设计,代码三方面来描述一个简单的IoC容器,来说明IoC容器是如何帮我们创建类的实例、如何实现依赖注入,最后会奉上一个完整的IoC容器实例。

       

一、需求,实现一个IoC容器


1、需求描述:



2、图中一些概念:


(1)服务元数据:一种是我们的编译好的类文件,即.class文件;另一种是xml文件。你可以理解为spring的注解和xml两种配置bean的方式。

(2)服务定义信息:由元数据转换来的信息,即读取bean中的注解或xml文件,获取到的对象描述信息。

(3)服务提供者:对象的实例。你可以理解为Spring中Bean的实例;

(4)服务定义信息存储区:保存服务定义信息的地方;

(5)服务提供者实例缓存区:保存服务提供者的地方。


3、流程描述:


(1)创建容器:初始化容器,实质是初始化容器内部的工厂,然后读取元数据,转化为服务定义信息,保存到服务定义信息存储区;

(2)调用服务提供者A的方法:获取该服务提供者A的服务定义信息,判断是否有缓存,如果有,直接调用缓存中的A;如果没有,据此实例化A,放入缓存,若发现A依赖其他服务提供者B,则查找缓存,如果有,将缓存中的B注入A;否则实例化B,注入到A中,同时放入缓存。以此类推。

(3)上面两个是核心流程,在此基础上,扩展了几个流程:

      1)获取所有服务提供者定义信息;

     2)获取所有服务提供者实例;

     3)获取某个服务提供者实例;

     4)热加载新的服务提供者。


二、设计,根据需求,以面向对象为基础,融合几种设计模式来勾勒IOC容器。

注:由于源码较多,会占很大篇幅,所以只给出了部分核心代码实现,所有代码见我的CSDN CODE,见文章末尾的说明。


1、UML,类图



2、设计说明


从类图可以看出,严格按照面向接口的方式编程,松耦合的设计保证了可扩展性和灵活性。

  • 12
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值