博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
swiftsuspenders Memo
阅读量:6941 次
发布时间:2019-06-27

本文共 3163 字,大约阅读时间需要 10 分钟。

 

核心类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

你可能感兴趣的文章
一个CIO的自白:如何推动传统公司转型上云?
查看>>
光伏跟踪系统的春天还有多远?
查看>>
三伏天衣食住行注意事项
查看>>
思博伦Tweakker赢得亚洲首个 MVNO合同
查看>>
Qt之资源系统
查看>>
RDS PostgreSQL\HDB PG 毫秒级海量时空数据透视 典型案例分享
查看>>
《数据库技术原理与应用教程》一3.5.3关系模型的数据结构、操纵和约束
查看>>
《超越LOGO设计:国际顶级平面设计师的成功法则(第2版)》—第1章无处不在的LOGO...
查看>>
“首次通过图灵测试的计算机”只是一场成功的娱乐宣传
查看>>
创业者的抑郁症,不是个小问题
查看>>
《大型网站服务器容量规划》一3.4 通过回归方程规划容量
查看>>
MaxCompute百问集锦(持续更新)
查看>>
《MATLAB智能算法超级学习手册》一一1.6 本章小结
查看>>
《驯狮记——Mac OS X 10.8 Mountain Lion使用手册》——2.8 Launchpad
查看>>
Weblogic10 集群配置
查看>>
《OSPF网络设计解决方案(第2版)》一1.5 网络拓扑类型
查看>>
图解 Java IO : 一、File源码
查看>>
iOS 安全之针对 mach_portal 的分析
查看>>
Java数组
查看>>
ROS机器人程序设计(原书第2版)1.2.7 安装rosinstall
查看>>