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

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

 2010-02-24 00:00:00 来源:WEB开发网   
核心提示: 代码生成有了类模板和方法模板,代码生成过程就变得有章可依,Java 动态代理机制分析及扩展,第 2 部分(3),基本过程可分为三步:1)生成代理类的方法集合;2)生成代理类的构造函数;3)最后生成整个代理类,生成代理类的方法集第一步,然后动态地生成各部分代码,函数 getMethodEntity

代码生成

有了类模板和方法模板,代码生成过程就变得有章可依。基本过程可分为三步:1)生成代理类的方法集合;2)生成代理类的构造函数;3)最后生成整个代理类。

生成代理类的方法集

第一步,通过反射获得被代理类的所有 public 或 protected 且非 static 的 Method 对象列表,这些方法将被涵盖的原因是它们是可以被其他类所访问的。

第二步,遍历 Method 对象列表,对每个 Method 对象,进行相应的代码生成工作。

清单 3. 对标签位进行代码替换生成方法代码

String declTemplate = "&Modifiers &ReturnType &MethodName(&Parameters) &Throwables"; 
String bodyTemplate = "&Declaration &Body"; 
// 方法声明 
String declare = declTemplate.replaceAll("&Modifiers", getMethodModifiers( method )) 
  .replaceAll("&ReturnType", getMethodReturnType( method )) 
  .replaceAll("&MethodName", method.getName()) 
  .replaceAll("&Parameters", getMethodParameters( method )) 
  .replaceAll("&Throwables", getMethodThrowables( method )); 
 
// 方法声明以及实现 
String body = bodyTemplate.replaceAll("&Declaration", declare ) 
  .replaceAll("&Body", getMethodEntity( method )); 

这里涉及了一些 ProxyEx 类的私有的辅助函数如 getMethodModifiers 和 getMethodReturnType 等等,它们都是通过反射获取所需的信息,然后动态地生成各部分代码。函数 getMethodEntity 是比较重要的辅助函数,它又调用了其他的辅助函数来生成代码并替换标签位。

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

Tags:Java 动态 代理

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