浏览 1332 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-08-27
############################# Parameter 实现细节 2008-08-27 17:50:11######################################### Parameter 参数类型 --- 包裹着参数的类型. 组件上下文的最小单元,用来描述某一对象所依赖的那些对象,这些对象将作为构造函数,setter方法以及method的参数. 参数在上下文中的类型被定义为一下几种. 1.基本类型 java基本类型(仅包含 short,int,long,float,double,boolean)以及引用类型.这里引用类型只的是非上下文中的对象如<component id = "demo" class = "java.lang.String"/>. 2.上下文引用类型 引用上下文中的组件作为参数如<ref>hello</ref>. 3.集合参数 可以包含其他的参数的参数-集合参数;提供了4中集合参数List,Set,Map,Array;这些集合参数的可以包含其他类型(目前仅仅支持<string><ref>). ~~~Paremter的实现方式~~~ 1.类之间的关系. Parameter 参数接口 AbstractParameter 骨架实现 BasicParameter 基本类型参数 CollectionParameter 集合参数的抽象 ListParameter List实现方式 SetParameter Set实现方式 MapParameter Map实现方式 ArrayParameter Array实现方式 SetterParameter 别名参数 使得参数有名字 RefParameter 上下文引用类型参数 CollectionParamterFactory 集合参数工厂<<abstract>> DefaultCollectonParameterFactory 工厂的默认实现. 2.在那里使用到 SetterParameter 1.是装饰器类装饰了 getByName 方法是参数有名字,没有被装饰的参数将抛出 java.lang.UnsupportedOperationException ; 在 MapParameter 中元素的key. 2.对于setter方法而言就一个参数而且setter方法是根据参数名称命名的,所以就提供一个名称供寻找方法. 3.实现细节 在具体的实现细节之前先要讨论一下类型别提出2个概念. public class Simple { public Simple(A a) { System.out.println("a"); } public Simple(B a) { System.out.println("b"); } public Simple(C a) { System.out.println("c"); } public static void main(String[] args) { new Simple(new D()); } } interface A { // ... } interface B extends A { // ... } interface C extends B { // ... } class D implements A, B, C { // ... } 上面的代码将会打印出c,我想要表达的意思是程序会自动选择到指定的"血缘"最近的方法. 而Java反射机制没有提供这样的机制必须给定明确的类型来选择方法,由此引出了2个概念---预期类型和实体类型. 1..实体类型 在这里代表的就是D这个对象的类型. 2.预期类型 你想选择A这个构造函数预期类型就要是A,预期类型的作用就是选择方法. ------------------------------Parameter------------------------------------------------------------------------------------------ /** * 返回参数实体. * * @param facilityContainer FacilityContainer 该参数实体有可能依赖容器的其他实体. * * @return Object 参数实体. */ public Object getParamEntity(FacilityContainer facilityContainer) throws ParameterException; /** * 返回预期类型. * 用来更加精确的选择方法对象时刻使用. * @return Class<?> 组件的预期类型. */ public Class<?> getExpectType(FacilityContainer facilityContainer); /** * 返回实体类型. * * @return Class<?> 组件的类型. */ public Class<?> getEntityType(FacilityContainer facilityContainer); /** * 返回参数的别名. * * @return String 参数的别名. */ public String getByName(); -------------------------------------------------------------------------------------------------------------------------------------- AbstractParameter 实现了 getByName, getEntityType, getExpectType方法.而返回参数实体的方法根据不同的参数类型分别去实现. BasicParameter 基本类型参数对象,该类型就是将构造函数放进来的参数直接返回. CollectionParameter 集合参数抽象,该类型使用到了 模板方法模式. 模板方法 getParamEntity 定义方法的执行顺序以及过程,并通过一些钩子 createParamEntity getElementCache getCheckElement 来创建实体获得元素缓存与验证元素类型. SetterParameter与RefParameter 2个装饰类 前者是给参数提供有名字的功能,后者是根据"引用"来引用上下文中的其他组件作为参数. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |