可以看到 , 动态生成的代理类有如下特性:
- 继承了Proxy类 , 实现了代理的接口 , 由于java不能多继承 , 这里已经继承了Proxy类了 , 不能再继承其他的类 , 所以JDK的动态代理不支持对实现类的代理 , 只支持接口的代理 。
- 提供了一个使用InvocationHandler作为参数的构造方法 。
- 生成静态代码块来初始化接口中方法的Method对象 , 以及Object类的equals、hashCode、toString方法 。
- 重写了Object类的equals、hashCode、toString , 它们都只是简单的调用了InvocationHandler的invoke方法 , 即可以对其进行特殊的操作 , 也就是说JDK的动态代理还可以代理上述三个方法 。
- 代理类实现代理接口的sayHello方法中 , 只是简单的调用了InvocationHandler的invoke方法 , 我们可以在invoke方法中进行一些特殊操作 , 甚至不调用实现的方法 , 直接返回 。
至此JDK动态代理的实现原理就分析的差不多了 。同时我们可以想像一下Spring AOP提供的各种拦截该如何实现 , 就已经很明了了 , 如下所示:
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // BeforeAdvice Object retVal = null; try { // AroundAdvice retVal = method.invoke(target, args); // AroundAdvice // AfterReturningAdvice } catch (Throwable e) { // AfterThrowingAdvice } finally { // AfterAdvice } return retVal; }
【超变态传奇上线65535 超级变态65535手机传奇】上面是对于Spring AOP使用JDK动态代理实现的基本框架代码 , 当然具体的实现肯定比这个复杂得多 , 但是基本原理不外乎如是 。所以理解基本原理对于理解其他的代码也是很有好处的 。
- 子宫三维彩超检查什么?
- 欣雨翱翔传奇 欣雨传奇
- psp超时空要塞三部一样 PSP超时空要塞不好玩
- 必听的20首经典日文歌,超好听的经典日文歌曲100首
- 动物传奇龙行天下 龙行天下传奇手游
- 为什么胆固醇不能摄入过多 胆固醇摄入量每天不超过
- 仿盛大合击传奇手游 仿盛大英雄合击版
- 槟榔致癌概率,一级致癌物槟榔消费者已超1亿
- 贵州风水故事传奇 播州古墓风水
- 男人更爱二婚超过原配吗 如何让男人更爱二婚超过原配的女人
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
