Janyou's blog

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 

image

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

posted on 2012-04-18 17:47  janyou  阅读(542)  评论(0编辑  收藏  举报