超变态传奇上线65535 超级变态65535手机传奇( 四 )



可以看到 , 动态生成的代理类有如下特性:

  1. 继承了Proxy类 , 实现了代理的接口 , 由于java不能多继承 , 这里已经继承了Proxy类了 , 不能再继承其他的类 , 所以JDK的动态代理不支持对实现类的代理 , 只支持接口的代理 。
  2. 提供了一个使用InvocationHandler作为参数的构造方法 。
  3. 生成静态代码块来初始化接口中方法的Method对象 , 以及Object类的equals、hashCode、toString方法 。
  4. 重写了Object类的equals、hashCode、toString , 它们都只是简单的调用了InvocationHandler的invoke方法 , 即可以对其进行特殊的操作 , 也就是说JDK的动态代理还可以代理上述三个方法 。
  5. 代理类实现代理接口的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动态代理实现的基本框架代码 , 当然具体的实现肯定比这个复杂得多 , 但是基本原理不外乎如是 。所以理解基本原理对于理解其他的代码也是很有好处的 。


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。