- 组件构造时可以通过注解配置依赖注入
- 支持构造函数注入
- 支持字段注入
- 支持方法注入
- 容许循环依赖
- 支持指定注入的组件
- 生命周期控制和支持注入时对Scope判断
无需构造的组件——组件实例- 如果注册的组件不可实例化,则抛出异常
抽象类接口
- 构造函数注入
无依赖的组件应该通过默认构造函数生成组件实例有依赖的组件,通过 Inject 标注的构造函数生成组件实例。如果所依赖的组件也存在依赖,那么需要对所依赖的组件也完成依赖注入。如果组件有多于一个 Inject 标注的构造函数,则抛出异常。如果组件没有 Inject 标注的构造函数,也没有默认构造函数,则抛出异常。如果组件需要的依赖不存在,则抛出异常。如果组件间存在循环依赖,则抛出异常。
- 字段注入
通过 Inject 标注将字段声明为依赖组件。如果组件需要的依赖不存在,则抛出异常。+ 如果组件间存在循环依赖,则抛出异常。=>通过 provider 获取的依赖应该包含字段注入的依赖。注入父类标记了 @Inject 的字段如果字段为 final 则抛出异常。
- 方法注入
通过 Inject 标注的方法,其参数为依赖组件。通过 Inject 标注的无参数方法,会被调用。按照子类中的规则,覆盖父类中的 Inject 方法。如果组件需要的依赖不存在,则抛出异常。+ 如果组件间存在循环依赖,则抛出异常。=>通过 provider 获取依赖应该包含方法注入的依赖。如果子类和父类同时存在不同的注入方法,父类的应该先被调用。如果方法定义类型参数,则抛出异常。
- 对 Provider 类型的依赖
支持注入 Provider 包装类型的组件。注入不支持的包装类型组件抛出异常。注入构造函数中可以声明对于 Provider 的依赖。注入字段中可以声明对于 Provider 的依赖。注入方法中可声明对于 Provider 的依赖。获取 provider 未注入时应该抛出 Not Found Exception通过 provider 获取 dependencies 应该包含 provider通过 provider 形成的循环依赖不会抛出异常
- 自定义 Qualifier 的依赖
- 注册组件时,可额外指定 Qualifier。
- 注册组件时,可从类对象上提取 Qualifier。
- 寻找依赖时,需同时满足类型与自定义 Qualifier 标注。
- 支持默认 Qualifier——Named
- Singleton 生命周期
- 注册组件时,可额外指定是否为 Singleton。
- 注册组件时,可从类对象上提取 Singleton 标注。
- 对于包含 Singleton 标注的组件,在容器范围内提供唯一实例。
- 容器组件默认不是 Single 生命周期
- 自定义 Scope 标注
- 可向容器注册自定义 Scope 标注的回调