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

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

 2010-02-24 00:00:00 来源:WEB开发网   
核心提示: 这里涉及到一个用于获取类的所有 Field 对象列表的静态辅助方法 getFields,为了提高频繁查询时的性能,Java 动态代理机制分析及扩展,第 2 部分(8),配合该静态方法的是一个静态的 fieldsMap 对象,用于记录已查询过的类其所包含的 Field 对象列表,使得再次查询时能迅

这里涉及到一个用于获取类的所有 Field 对象列表的静态辅助方法 getFields。为了提高频繁查询时的性能,配合该静态方法的是一个静态的 fieldsMap 对象,用于记录已查询过的类其所包含的 Field 对象列表,使得再次查询时能迅速返回其对应列表。相应的,类模板也需进行更新。

清单 11. 增加了静态 fieldsMap 变量后的类模板

package &Package; 
final public class &Name &Extends &Implements 
{ 
  private static java.util.HashMap fieldsMap = new java.util.HashMap(); 
  private java.lang.reflect.InvocationHandler handler = null; 
  &Constructors 
  &Methods 
} 

清单 12. 声明在动态生成的代理类内部的静态方法 getFields

private static java.lang.reflect.Field[] getFields(java.lang.Class c) 
{ 
  if( fieldsMap.containsKey(c) ) 
  { 
    return (java.lang.reflect.Field[])fieldsMap.get(c); 
  } 
   
  java.lang.reflect.Field[] fields = null; 
  if( c == java.lang.Object.class ) 
  { 
    fields = c.getDeclaredFields(); 
  } 
  else 
  { 
    java.lang.reflect.Field[] fields0 = getFields(c.getSuperclass()); 
    java.lang.reflect.Field[] fields1 = c.getDeclaredFields(); 
    fields = new java.lang.reflect.Field[fields0.length + fields1.length]; 
    System.arraycopy(fields0, 0, fields, 0, fields0.length); 
    System.arraycopy(fields1, 0, fields, fields0.length, fields1.length); 
  } 
  fieldsMap.put(c, fields); 
  return fields; 
} 

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

Tags:Java 动态 代理

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