造轮计划 IOC

IOC 实现

IOC 的理念和实现
理解 IOC

控制反转(Inversion of Control,IoC)是一种设计模式,它将对象的创建和对象之间的依赖关系的管理从应用程序代码中转移到外部容器或框架中。这种模式的目的是减少应用程序代码的耦合度,使代码更加灵活和可维护。

实现 IOC

实现IOC的方式有很多种,其中最常见的方式是使用依赖注入(Dependency Injection,DI)。依赖注入是一种将依赖关系从一个对象传递到另一个对象的技术。它通过将依赖关系的创建和管理委托给外部容器或框架来实现IOC。

下面是IOC和DI的区别总结:

IOC DI
控制反转 依赖注入
将对象的创建和对象之间的依赖关系的管理从应用程序代码中转移到外部容器或框架中 将依赖关系的创建和管理委托给外部容器或框架来实现IOC
减少应用程序代码的耦合度,使代码更加灵活和可维护 将依赖关系从一个对象传递到另一个对象的技术
个人总结

IOC 理念:引入第三方容器统一管理依赖关系

IOC 实现:依赖注入

如果希望实现 IOC ,则最起码要实现第三方容器(配置机制)和依赖注入(获取机制),除此之外,还要实现依赖管理机制

Spring IOC 机制

回顾 Spring 的三种配置-获取机制:setBean + getBean

  • XML 配置
  • Annotation in Code + Thin Config 配置(注解配置)
  • Annotation in Config + Fat Config 配置(Java 类配置)

抽象出来的流程都是

graph LR 被调类信息 --读入--> 第三方容器 --注解/getBean--> 调用者

实现时想起先前的使能课程有讲到用等效于 XML 的 properties 作为配置文件,实现简易 IOC 的流程,复现了一遍,约等于实现了 XML 配置的实现方法

广义来说 Config 配置都要与注解相结合,太麻烦了,本质上最终都会变成 HashMap,直接用 HashMap 实现最简单的 Config 配置类信息

严格上说,这里并不能说完全实现了 IOC 容器,只是实现了基础的配置-获取机制

层流分析

IOC 结构
  • config:Java 类配置实现
    • BeanFactoryByConfig:BeanFactory By 内部配置类配置
    • Config:配置类
  • entity:实体
    • User
  • properties:配置文件实现
    • BeanFactoryByProperties:BeanFactory By 外部配置文件配置
    • beans.properties:配置文件
IOC 流程
  1. 配置:本质上是获取一个 HashMap 等价物,BeanName 作为 Key,类的全限定类名作为 Value
  2. 获取:利用 getBean 方法,通过 BeanName 获取一个对象

源码地址

此处只实现了配置文件和配置类两种配置方式,注解配置融入到 AOP 造轮计划中

https://github.com/Ba11ooner/ioc-demo

posted @ 2023-05-19 17:39  Ba11ooner  阅读(8)  评论(0编辑  收藏  举报