java的动态代理机制详解-编程开发技术

java的动态代理机制详解-编程开发技术

ID:30780042

大小:77.22 KB

页数:6页

时间:2019-01-03

java的动态代理机制详解-编程开发技术_第1页
java的动态代理机制详解-编程开发技术_第2页
java的动态代理机制详解-编程开发技术_第3页
java的动态代理机制详解-编程开发技术_第4页
java的动态代理机制详解-编程开发技术_第5页
资源描述:

《java的动态代理机制详解-编程开发技术》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、java的动态代理机制详解-编程开发技术java的动态代理机制详解原文出处:xiaoluo501395377在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是A0P,对于IoC,依赖注入就不用多说了,而对于Spring的核心A0P来说,我们不但要知道怎么通过A0P来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而A0P的原理就是java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾。在java的动态代理机制中,有两个重要的类或接口,一个是InvocationHandlcr

2、(Interface)>另一个则是Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。首先我们先来看看java的API帮助文档是怎么样对这两个类进行描述的:InvocationHandler:InvocationHandleristheinterfaceimplementedbytheinvocationhandlerofaproxyinstance・Eachproxyinstancehasanassociatedinvocationhandle匚Whenamethodisinvokedonaproxyinstance,

3、themethodinvocationisencodedanddispatchedtotheinvokemethodof让sinvocationhandler.每一个动态代理类都必须耍实现InvocationHandler这个接口,并冃每个代理类的实例都关联到了一个handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由InvocationHandlcr这个接口的invoke方法来进行调用。我们来看看InvocationHandler这个接口的唯个方法?invoke?方法:Objectinvoke(Objectpr

4、oxy,Methodmethod,Object[]args)throwsThrowable我们看到这个方法一共接受三个参数,那么这三个参数分别代表什么呢?Objectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowableproxy:指代我们所代理的那个真实对象method:指代的是我们所要调用真实对象的某个方法的Method对象args:指代的是调用真实对象某个方法时接受的参数如果不是很明白,等下通过一个实例会对这几个参数进行更深的讲解。接卜•来我们来看看Proxy这个类:P

5、roxyprovidesstaticmethodsforcreatingdynamicproxyclassesandinstances,anditisalsothesuperclassofal1dynamicproxyclassescreatedbythosemethods.Proxy这个类的作用就是用來动态创建一个代理对象的类,它提供了许多的方法,但是我们用的最多的就是?newProxyInstance?这个方法:publicstaticObjectnewProxylnstance(ClassLoaderloader,Class[]

6、interfaces,InvocationHandlerh)throwsIllegalArgumentExceptionReturnsaninstanceofaproxyclassforthespecifiedinterfacesthatdispatchcsmethodinvocationstothespecifiedinvocationhandler・这个方法的作用就是得到一个动态的代理对彖,其接收三个参数,我们来看看这三个参数所代表的含义:publicstaticObjectnewProxyTnstance(ClassLoaderloa

7、der,Class[]intcrfaccs,InvocationllQndlerh)throwsIllcgalArgumcntExccptionloader:一个ClassLoader对彖,定义了由哪个ClassLoader对彖来对主成的代理对象进行加载interfaces:一个Interface对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我提供了一组接口给它,那么这个代理对象就宣称实现了该接口(多态),这样我就能调用这组接口屮的方法了h:一个InvocationHandler对象,表示的是当我这个动态代理对象在

8、调用方法的时候,会关联到哪一个InvocationHandler对象上好了,在介绍完这两个接口(类)以后,我们来通过一个实例来看看我们的动态代理模式是什么样的:首先我们定义了一个

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

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

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