核心类Injector

Injector 通过下面的方法 注册和注销 inject,

mapValue,mapClass,mapSingleton/mapSingletonOf,mapRule,unmap

Injector 通过下面的方法在实际类中 注入 inject,或者使用在Injector中注册的inject的信息,

injectInto,getInstance,hasMapping,instantiate

(1)主要类

Injector 注入器

主要使用类

InjectionType  注入类型

VALUE
CLASS
SINGLETON

Reflector 反射工具类

取得Fully Qualified Class Name

取得Class

判断class Extends Or Implements

InjectionConfig 注入配置类

根据此类得到注入inject实例

InjectionResult 注入实例生成策略

当InjectionType为VALUE/CLASS/SINGLETON/OtherRule时,生成inject类实例的具体实现类。

InjectionPoint注入点

Method

NoParamsConstructor

PostConstruct

Property

Constructor

(2)Injector

  • m_mappings

存放(requestName + '#' + named~InjectionConfig)
['‘Fully Qualified Class Name“-injectCOnfig] key-value
  • mapValue  (以value供inject)

把实例直接放入InjectionConfig,然后把InjectionConfig放入['‘Fully Qualified Class Name“-injectCOnfig]maping。

当注入使用时,直接使用这个实例。

//格式

mapValue(whenAskedFor : Class, useValue : Object, named : String = "")

//配置映射

var myClassInstance:MyClass = new MyClass();
injector.mapValue(MyClass, myClassInstance);

//在其他类中使用

[Inject]
public var myClassInstance:MyClass

注意,使用这种注入方式时,如果这个实例中也有[Inject],是不会被自动注入实例的。

如果需要,可以手动注入:

injector.injectInto(myClassInstance);

  • mapClass(以Class供inject)

把类名放入InjectionConfig,然后把InjectionConfig放入['‘Fully Qualified Class Name“-injectCOnfig]  maping。

当注入使用时,由Injector实例化这个类的一个新实例。

//格式

mapClass( whenAskedFor : Class, instantiateClass : Class, named : String = "")

//配置映射

injector.mapClass(MyClass);

//在其他类中使用

[Inject]
public var myClassInstance:MyClass

注意,使用这种注入方式时,如果这个类也有[Inject],是会被自动注入的,并且每次会产生一个新的注入实例。

  • mapSingleton/mapSingletonOf(以Singleton Class供inject)

把类名放入InjectionConfig,然后把InjectionConfig放入['‘Fully Qualified Class Name“-injectCOnfig]maping。

当注入使用时,如果实例不存在,则由Injector实例化这个类的实例使用,如果存在,则使用存在的实例。

mapSingleton 用于注入类

//格式

mapSingleton(whenAskedFor : Class, named : String = "")

//配置映射

injector.mapSingleton(MyClass);

//在其他类中使用

[Inject]
public var myClassInstance:MyClass

mapSingletonOf 用于注入接口

//格式

mapSingletonOf( whenAskedFor : Class, useSingletonOf : Class, named : String = "")

//配置映射

injector.mapSingletonOf(IMyClass, MyClass); //MyClass implements IMyClass

//在其他类中使用

[Inject]

public var myClassInstance:IMyClass

注意,使用这种注入方式时,如果这个类也有[Inject],是会被自动注入的,并且每次使用的是同一个实例。

  • mapRule(根据规则生成inject实例)

//格式

mapRule(whenAskedFor : Class, useRule : *, named : String = "")

useRule  为InjectionConfig的子类。

InjectionConfig有一个getResponse(injector : Injector) : Object方法

通过这个方法来得到实例

  • getMapping

getMapping(whenAskedFor : Class, named : String = "") : InjectionConfig

根据Fully Qualified Class Name取得InjectionConfig。

  • injectInto

injectInto(target : Object)

target是带有[Inject] 的类实例,通过injectInto方法把它需要的实例注入。

  • instantiate

instantiate(clazz:Class):*

clazz是带有[Inject] 的类,实例化这个类,并通过injectInto方法把它需要的实例注入。

  • unmap

unmap(clazz : Class, named : String = "")

把clazz 从Injector中去掉,是mapValue,mapClass,mapSingleton/mapSingletonOf, mapRule的反操作。

  • hasMapping

hasMapping(clazz : Class, named : String = '') : Boolean

判断clazz是否在Injector中mapping中

  • getInstance

getInstance(clazz : Class, named : String = '') : *

如果clazz已经在Injector中注册,取得clazz在Injector中实例

  • createChildInjector/setParentInjector

child parent Injector策略

转载于:https://www.cnblogs.com/janyou/archive/2012/04/18/2455699.html

swiftsuspenders Memo相关推荐

  1. SwiftSuspenders 1.6-深入浅出1

    深入 这篇SwiftSuspenders 浅出深入的 深入部分主要是对SwiftSuspenders进行深度剖析,包括对SwiftSuspenders的体系结构的分析,一个对象在整个注入过程中会经历怎 ...

  2. SwiftSuspenders 1.6 浅出深入 深入 2

    类解读 Injector Injector是整个SwiftSuspenders框架的核心.与开发者打交道最多的也就是Injector类.Injector就是注入器,其功能相当于Spring里的Appl ...

  3. SAP Credit Memo Debit Memo

    credit memo和debit memo是对企业向顾客已经交付的货物的价值进行调整的单据类 型.举个例,如果您已经就所交付的货物向买主开具了100元的发票,可是由于货物质量的瑕疵, 买主主张&qu ...

  4. react组件放在数组中_为什么要在函数组件中使用React.memo?

    这里提一下,如果大家看到这个标题有所疑惑的话,可以花点时间看一下本篇文章.反之呢如果是看到标题第一时间就反映出结论的话,就可以去get其他文章的知识点了 那么接下来就不废话了,直接长刀直入,进入正题! ...

  5. 安卓入门系列-09一个实战小项目(备忘录Memo)

    一个简单的安卓平台下的备忘录 背景 之前已经介绍了不少的控件(TextView和ListView等等)以及开发中最常见的组件(Activity)(Service的权重在我心中没有Activity重要, ...

  6. [react] 使用React的memo和forwardRef包装的组件为什么提示children类型不对?

    [react] 使用React的memo和forwardRef包装的组件为什么提示children类型不对? 过去使用Component.FC等类型定义组件时一般不需要我们定义props里childr ...

  7. Debit and Credit Memo

    What is Debit note and Credit note?  What is the purpose?  How we create? 1. A transaction that redu ...

  8. Memo History Tracking History in Access 2007

    今天在看Access2007的是资料时,看到Access2007里的这个新功能,就想试一下. 我创建了一个新的Access数据库,在一个新表里加入了一个Memo字段.对其中的数据进行了多次修改后.右键 ...

  9. react新特性实例详解(memo、lazy、suspense、hooks)

    1.memo 其实react.memo的实现很简单,就几行代码. export default function memo<Props>(type: React$ElementType,c ...

最新文章

  1. 嵌入式面试C语言试题
  2. 为什么要完成量子计算机,我们为啥要量子计算机?
  3. Java删除文件和目录
  4. SpringBoot学习:读取yml和properties文件的内容
  5. 【启智树NOIP模拟】奇偶【卢卡斯定理】【背包】【bitset】
  6. 95-32-010-ChannelPipeline-ChannelPipeline简介
  7. 动易 dw css不对,动易2019后台管理编辑器后台无法插入任何东西..._网络编辑_帮考网...
  8. H3C进入目录---用户视图
  9. org_chart.js 使用方法
  10. Greenplum6.x监控软件搭建
  11. 基于SpringBoot监控Java项目,暴漏springboot内置端点
  12. 用计算机创造一个宇宙,人工智能令整个宇宙变成一个玄计算机,宇宙是虚拟的,真实世界...
  13. 申请HTTPS证书流程
  14. nslookup参数说明
  15. Java char转成int的方法
  16. 哈工大《大数据计算基础》期末考试2021
  17. 卸载 ibus 使Ubuntu16.04任务栏与桌面图标消失
  18. Win11 解决 资源管理器和右键问题
  19. 火狐浏览器视频下载插件
  20. python 删除字符串中\xe2\x94\u25cf\U0001f511的unicode字符

热门文章

  1. python3环境下“No module named nrrd”的解决办法
  2. 固态器件理论(9)晶闸管
  3. Nand Flash,Nor Flash,BPI Flash,SPI Flash 的区别?
  4. Mac卸载mysql并安装mysql升级到8.0.13版本
  5. Leaf:GO语言游戏框架介绍及入门
  6. 12c PDB自启动
  7. ⑭云上场景 神州导航科技,智慧云平台三层架构部署实践
  8. 明天又回LOVO了!
  9. 找工作壹個月以来的感受
  10. [转]web标准的几个误区