WEB开发网
开发学院软件开发Java Java 动态代理机制分析及扩展,第 2 部分 阅读

Java 动态代理机制分析及扩展,第 2 部分

 2010-02-24 00:00:00 来源:WEB开发网   
核心提示: 清单 5. ProxyEx 的静态方法 getTypeHelper()privatestaticStringgetTypeHelper(Classtype){if(type.isArray()){Classc=type.getComponentType();returngetTypeHelper

清单 5. ProxyEx 的静态方法 getTypeHelper()

private static String getTypeHelper(Class type) 
{ 
  if( type.isArray() ) 
  { 
    Class c = type.getComponentType(); 
    return getTypeHelper(c) + "[]"; 
  } 
  else 
  { 
    return type.getName(); 
  } 
} 

第三步,将所生成的方法保存进一个 map 表,该表记录的是键值对(方法声明,方法实现)。由于类的多态性,父类的方法可能被子类所覆盖,这时以上通过遍历所得的方法列表中就会出现重复的方法对象,维护该表可以很自然地达到避免方法重复生成的目的,这就维护该表的原因所在。

生成代理类的构造函数

相信读者依然清晰记得代理类是通过其构造函数反射生成的,而构造时传入的唯一参数就是调用处理器对象。为了保持与原代理机制的一致性,新的代理类的构造函数也同样只有一个调用处理器对象作为参数。模板简单如下

清单 6. 构造函数模板

public &Constructor(java.lang.reflect.InvocationHandler handler) 
{ 
  super(&Parameters); 
  this.handler = handler; 
} 

需要特别提一下的是 super 方法的参数值列表 &Parameters 的生成,我们借鉴了 Mock 思想,侧重于追求对象构造的成功,而并未过多地努力分析并寻求最准确最有意义的赋值。对此,相信读者会多少产生一些疑虑,但稍后我们会提及改进的方法,请先继续阅读。

生成整个代理类

通过以上步骤,构造函数和所有需被代理的方法的代码已经生成,接下来就是生成整个代理类的时候了。这个过程也很直观,通过获取相关信息并对类模板中各个标签位进行替换,便可以轻松的完成整个代理类的代码生成。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:Java 动态 代理

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接