• 依然↗纯白色
    2020-12-11
    小马哥,动态代理是不是应该在Proxy#newProxyInstance里面传入Interface类,下面调用方法应该使用method.invoke调用代理对象的方法吧,不然现在的写法不是和静态代理无差别了吗?容易晕车😂

    作者回复: 哈哈,你说得没错~

    共 5 条评论
    5
  • 梦想吊打面试官的小小...
    2021-09-06
    我觉得这里的动态代理的例子不是很能体现jdk动态代理的特点,Jdk动态代理一般是在初始化InvocationHandler的时候提供一个realSubject,然后在代理方法调用并回调invoke方法的时候,利用method反射的方式去调用realSubject中的目标方法。 如下 ProxyEchoService realObj = new ProxyEchoService(new DefaultEchoService()); Object proxy = Proxy.newProxyInstance(classLoader, new Class[]{EchoService.class}, new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("动态前置"); Object obj = null; if (EchoService.class.isAssignableFrom(method.getDeclaringClass())) { obj = method.invoke(realObj, args); } System.out.println("动态后置"); return obj; } });
    展开

    作者回复: 👍

    
    3
  • Wzefeng
    2021-03-27
    静态代理是不是就是装饰器模式

    作者回复: 的确使用的是装饰器模式

    
    3
  • 斜杠青年
    2021-01-01
    无论是静态代理和动态代理不是都需要重新发布代码吗?一直有一个疑惑,动态代理在真正开发的过程当中的价值体现?

    作者回复: 静态代理通常需要,而动态不需要,它会被动态地加载~

    共 2 条评论
    1
  • 尔冬橙
    2022-08-14 来自湖南
    静态代理对于多个实现接口也只要写一次吧,从需要添加的类的个数上看,动态代理有比静态代理有优势吗?

    作者回复: 1 动态代理不需要实现所有方法 2 当原类型发生变更时,不需要重新编译调整 3 动态代理有利于实现动态脚本执行,比如表达式等

    
    
  • Attract
    2021-04-04
    静态代理那个demo有点文体!英国再proxy里面吊用一次default才视线啦扩展!现在只有proxy供能没有default得功能

    作者回复: 嘿嘿~

    共 3 条评论
    
  • 斜杠青年
    2021-01-01
    本节的收获:静态代理,使用的就是实现加上组合的方式进行设计的。动态代理就是通过,Proxy对目标的类,目标方法进行方法增强处理,其中的大致思路是,1.找到要被代理的对应类并且判断是否可以在当前的类加载器中2找到对应的方法并且进行重新构建一个新的Object并且加载到相同的类加载器里面。

    作者回复: 666

    
    
  • 斜杠青年
    2020-12-12
    这节课,认真听了,并且动手实验了一下 对原理由浅入深 的渐渐理解 收获很大!

    作者回复: 感谢支持~

    
    
  • 胡化敏
    2020-12-10
    动态代理 lambda Object proxy = Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[]{EchoService.class}, (p, method, ags) -> { if (EchoService.class.isAssignableFrom(method.getDeclaringClass())) { long start = System.nanoTime(); String result = "[Echo Proxy ]" + ags[0]; long end = System.nanoTime(); System.out.println(end - start); return result; } return null; }); EchoService e= (EchoService) proxy; System.out.println(e.echo("哈哈"));
    
    1