下载此文档

黑马程序员-java代理总结.docx


文档分类:IT计算机 | 页数:约12页 举报非法文档有奖
1/12
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/12 下载此文档
文档列表 文档介绍
一、代理概述 1、要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理、日志、计算方法的运行时间、事物管理等等,该怎么做? 答: 编写一个与目标类具有相同接口的代理类, 代理类的每个方法调用目标类的相同方法, 并在调用方法时增加系统功能的代码。 2 、代理架构图: 3、代理类的各个方法中除了要调用目标类的相应方法和对外返回目标类方法返回的结果外, 还可以在代理方法中的如下三个位置加上系统功能代码: 1) 在调用目标方法之前; 2) 在调用目标方法之后; 3) 在处理目标方法异常的 catch 块中[java] view plain copy 1. void sayHello(){ 3. try { 4. (); 5.} catch (Exception e){ 7.} 9.}4、 AOP ( Aspect Oriented Program ) 面向方面编程( Aspect Oriented Program , 简称 AOP ) 的目标就是要使交叉业务模块化, 可以将切面代码移动到原始方法的周围, 这与直接在方法中编写切面代码的运行效果是一样的。而代理正是实现 AOP 功能的核心和关键技术。二、动态代理技术 1、要为系统中的各种目标类增加代理功能,那将需要许多代理类,若全部采用静态代理方式将十分麻烦。 2、 JVM 可以在运行期动态生成类的字节码,这种动态生成的类往往被用作代理类,这就是动态代理。 3、 JVM 生成的动态类必须实现一个或多个接口,所以 JVM 生成的动态类只能用于具有相同接口的目标类的代理。 4、开源的 CGLIB 库可以动态生成一个类的子类, 一个类的子类也可以用作该类的代理, 所以使用 CGLI B 库可以用于没有实现接口的目标类的代理。例1 :分析 JVM 动态生成的代理类[java] view plain copy 1. /* 2.*用 方法创建实现了 Collection 接口的动态代理类并查看它的名字 3.*列出动态代理类中的所有构造方法及其参数列表 4.*列出动态代理类中的所有方法及其参数列表 5. */ 6. .ItCast; 7. 8. import ; 9. import ; 10. import ; 11. import ; 12. 13. public class ProxyTest { 14. 15. public static void main(String[] args) { 16. // 创建实现了 Collection 接口的动态代理类并获得其名字 17. Class proxyClazz=(Collection. class .getClassLoader (), Collection. class ); 18. (()); 19. 20. // 列出动态代理类中的所有构造方法 21. ( ".........Constructors.........." ); 22. Constructor[] constructors=(); 23. for (Constructor constructor : constructors) { 24. String name=(); 25. StringBuilder sb= new StringBuilder(name); 26. ( '(' ); 27. Class[] paramClazzs=(); 28. for (Class paramClazz : paramClazzs) { 29. (()).append( ',' ); 30. } 31. if (paramClazzs!= null &? != 0) 32. (()- 1 ); 33. ( ')' ); 34. (());

黑马程序员-java代理总结 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
最近更新