Java动态代理再理解

痛定思痛。 2022-06-13 01:21 227阅读 0赞

这是我理解的动态代理的原理图:

Center

动态代理实例:

  1. public class TestProxy {
  2. public static void main(String[] args) {
  3. //被代理对象
  4. RealSubject rs = new RealSubject();
  5. //创建一个实现了InvocationHandler 的代理类对象
  6. MyInvocationHandler myInvocationHandler = new MyInvocationHandler(rs);
  7. //创建被代理对象(结合原理图,可以理解,动态生成的字节码需要类加载器重新加载才可以生成Java相关对象)
  8. Object obj = Proxy.newProxyInstance(rs.getClass().getClassLoader(), rs.getClass().getInterfaces(), myInvocationHandler);
  9. Subject subject = (Subject) obj;
  10. //通过反射执行被代理类的相关方法(并添加相应的附加业务逻辑)
  11. subject.action();
  12. }
  13. }
  14. interface Subject{
  15. void action();
  16. }
  17. class RealSubject implements Subject{
  18. @Override
  19. public void action() {
  20. System.out.println("我是被代理类");
  21. }
  22. }
  23. //动态代理类(凡是很动态代理相关的都与这个InvocationHandler接口有关系)
  24. class MyInvocationHandler implements InvocationHandler{
  25. Object obj;
  26. public MyInvocationHandler(Object obj) {
  27. this.obj = obj;
  28. }
  29. //当通过代理类对象发起对被重写的被代理类的方法进行调用的时候,都会转化成如下的invoke()方法的调用
  30. @Override
  31. public Object invoke(Object proxy, Method method, Object[] args)
  32. throws Throwable {
  33. //method 方法的返回值是 returnValue
  34. System.out.println("代理类执行之前,所调用的方法名是:"+method.getName()+"的方法的执行");
  35. Object returnValue = method.invoke(obj, args);
  36. return returnValue;
  37. }
  38. }

发表评论

表情:
评论列表 (有 0 条评论,227人围观)

还没有评论,来说两句吧...

相关阅读

    相关 彻底理解Java动态代理

    代理设计模式 定义:为其他对象提供一种代理以控制对这个对象的访问。 动态代理使用 java动态代理机制以巧妙的方式实现了代理模式的设计理念。 代理模式示例代码

    相关 理解java动态代理

    理解java动态代理 java动态代理主要用来做方法的增强,让你可以在不修改原来代码的情况下,增强一些方法,也就是在原来的方法执行前后做任何你想做的事情。具体应用的话,比