美文网首页
IOC之依赖注入原理

IOC之依赖注入原理

作者: 做一只旅行青蛙 | 来源:发表于2021-09-10 18:43 被阅读0次

IOC的一个很重要的实现就是依赖注入,将用户对类实例化的操作权,反转给容器去做,由容器来处理类与类之间的依赖关系,从而可以降低模块与模块之间的耦合关系。

下面是手动实现的依赖注入原理:

// es7的提案,ts1.5+版本已经支持,可以通过他给类或者类的原型属性上添加元数据
import 'reflect-metadata';
 
const INJECTED = '__inject__';
 
type Constructor<T = any> = new (...args: any[]) => T;
 
// 定义一个装饰器,他可以在类的构造函数上定义元数据,定义的元数据是构造函数的所有参数
const Injectable = (): ClassDecorator => (constructor) => {
  Reflect.defineMetadata(
    INJECTED,
    Reflect.getMetadata('design:paramtypes', constructor), // 这里还支持两外两种内置元数据定义,一个是design:type获取属性类型,一个是design:returntype获取返回值类型
    constructor,
  );
};
 
@Injectable()
class AService {
  a = 1;
}
 
@Injectable()
class BService {
  b = 2;
  constructor(private aService: AService) {}
}
 
@Injectable()
class TestService {
  constructor(
    private obj,
    private aService: AService,
    private bService: BService,
  ) {}
}
 
const getInstance = <T>(target: Constructor<T>): T => {
  // 获取所有注入的服务
  const providers = Reflect.getMetadata(INJECTED, target);
  const args =
    providers?.map((provider: Constructor) => {
      console.log(provider);
      return getInstance(provider); // 递归实例化所有依赖
    }) ?? [];
  return new target(...args);
};
 
console.log(getInstance(TestService));
 
// 打印结果:
/*
 *  [Function: Object]
 *  [class AService]
 *  [class BService]
 *  [class AService]
 *  TestService {
 *      obj: {},
 *      aService: AService { a: 1 },
 *      bService: BService { aService: AService { a: 1 }, b: 2 }
 *  }
*/

特点:通过容器完成对象的装配,注入到需要的对象(被动获取)
因此依赖注入又被称之为好莱坞原则:”Don't call us, we'll call you”,有事儿不要找我们,如果有需要我们会找你!

相关文章

  • IOC之依赖注入原理

    IOC的一个很重要的实现就是依赖注入,将用户对类实例化的操作权,反转给容器去做,由容器来处理类与类之间的依赖关系,...

  • Spring学习之依赖注入

    Spring学习之依赖注入 依赖注入的基本概念 依赖注入(Dependecy Injection),也称为IoC(...

  • Dagger2常用注解诠释

    依赖注入 控制反转(IoC)与依赖注入(DI)浅谈依赖注入理解依赖注入(IOC)和学习Unity Gradle配置...

  • Spring 技术内幕(读书笔记)

    IoC概述 IoC 依赖倒置原则:抽象不依赖具体的细节 控制反转也被成为依赖注入 亦被成为依赖倒置原理 是Spri...

  • IOC原理解读(二)

    IOC原理解读(二) 继上篇 今天解读的是: 基于xml配置的bean的IOC过程中的实例化跟依赖注入原理。 ...

  • 每日java--Day02:依赖注入和控制反转

    昨天学的反射,今天学习依赖注入。控制反转 IOC:利用了反射机制依赖注入 DI:是 IOC 的一种形式,使类与类之...

  • 控制反转

    什么是控制反转(IOC),什么是依赖注入(DI)?问题:什么是控制反转(IOC),什么是依赖注入(DI)?IOC:...

  • Spring从入门到放弃 1:IoC

    核心:IoC IoC就是依赖注入,技术原理比较复杂,作为使用者我们可以不了解。IoC实际实现的功能非常直观。 没有...

  • 依赖注入原理---IoC框架

    原文地址,此处只为学习先来讲一讲,一个简单的依赖注入例子。 依赖 如果在 Class A 中,有 Class B ...

  • IOC依赖注入框架原理

    1 动态代理深入 首先简单看下一个动态代理的例子 当通过Proxy的newProxyInstance方法创建一个I...

网友评论

      本文标题:IOC之依赖注入原理

      本文链接:https://www.haomeiwen.com/subject/vfdnwltx.html