黑马程序员-java代理总结

黑马程序员-java代理总结

ID:43313179

大小:272.06 KB

页数:15页

时间:2019-09-30

黑马程序员-java代理总结_第1页
黑马程序员-java代理总结_第2页
黑马程序员-java代理总结_第3页
黑马程序员-java代理总结_第4页
黑马程序员-java代理总结_第5页
资源描述:

《黑马程序员-java代理总结》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、一、代理概述1、要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,界常处理、日志、计算方法的运行吋间、事物管理等等,该怎么做?答:编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时增加系统功能的代码。2、代理架构图:doSomeThing(X/備*累扳功琵代均目标对象doSomeTWngO〃后豪系统功能代冈接口doSomeThing()Client客户端调用程序Proxy代理类Target目标类doSomeThing(X}3、代理类的各个方法屮除了要调用冃标类的相应方法和对外返回目标类方法返回的结果外,

2、还可以在代理方法中的如下三个位置加上系统功能代码:1)在调用目标方法之前;2)在调用冃标方法Z后;3)在处理目标方法异常的catch块中□ava]viewplaincopy1.voidsayHello(){2.系统功能代码3・try{4.target.sayHello()5.}catxh(Exceptione){6.系统功能代码7.}8.系统功能代码9.}4>AOP(AspectOrientedProgram)面向方面编程(AspectOrientedProgram,简称AOP)的冃标就是要使交叉业务模块化,可以将切面代码移动到原始方法的周围,这与直接在方法中编

3、写切面代码的运行效果是一样的。而代理正是实现AOP功能的核心和关键技术。二、动态代理技术1、要为系统屮的各种目标类增加代理功能,那将需要许多代理类,若全部采用静态代理方式将十分麻烦。2、JVM可以在运行期动态生成类的字节码,这种动态生成的类往往被用作代理类,这就是动态代理。3、JVM生成的动态类必须实现一个或多个接口,所以JVM生成的动态类只能用于具有相同接口的目标类的代理。4、开源的CGLIB库可以动态生成一个类的子类,一个类的子类也可以用作该类的代理,所以使用CGLIB库可以用于没有实现接口的目标类的代理。例分析JVM动态生成的代理类[java]viewpl

4、aincopy1./*2・*用Proxy.getProxyClass方法创建实现了Collection接口的动态代理类并查看它的名字3.*列出动态代理类中的所冇构造方法及共参数列表4.*列出动态代理类中的所冇方法及其参数列表5・*/6•packageCom•cn•ItCast;7.8.import9.import10.import11.import12.java•lang.reflect.Constructor;java•lang.reflect.Method;java•lang•reflect•Proxy;java•util•Collection;13.pub

5、licclassProxyTest{14.14.publicstaticvoidmaiiXStTing[]args){15.//创建实现了Collection接口的动态代理类并获得其名字16.ClassproxyClazz=ProxyegetProxyClass(Collection.class.getClassLoader(),Collection.class);18.19.20.21.22.23.24.25.System.out•println(proxyClazz.getName());//列出动态代理类中的所有构造方法System•out•printin

6、("Constructonsf,);Construetor[]construct。rs二proxyClazztConstruetors();for(Constructorconstructor:constructors){Stringname=constructor辭上也皿6();StringBuildersb=newStringBuilder(name);26.sb.append('('27.Class[]paramClazzs=construetor・getParameterTypes();28.for(ClassparamClazz:paramClazzs

7、){29.sb.append(paramClazz・getNamG()).append(S');30.}31.if(paramClazzs!=null&5mClazzs.length!=0)32.sb.deleteCharAt(sb.length()-1);33.sb.append(')1);34.System.out•println(sb.toString());35.}36.36.〃列出动态代理类中的所有方法38•System•out•printin(”Methods”);39•Method[]methods=proxyClazz.getMethods();

8、40.for(Metho

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。