美文网首页
JAVA 反射(二)动态代理

JAVA 反射(二)动态代理

作者: Minstrel_a7ca | 来源:发表于2018-07-21 10:17 被阅读0次

概念

在运行期间动态的创建接口的实现
通过生成的代理类,可以完成对接口的实现。

关键类和接口

处理接口方法的接口 InvocationHandler
代理生成类 Proxy

典型代码

创建Foo接口的代理实现

创建某一接口 Foo 的代理:
     InvocationHandler handler = new MyInvocationHandler(...);
     Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
                                          new Class[] { Foo.class },
                                          handler);

步骤

1.对接口方法的处理
首先需要实现InvocationHandler接口,重写invoke方法

public class MyInvocationHandler implements InvocationHandler{
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
      //..所有方法的调用都会在这里执行
  }
}

2.通过Proxy的静态方法生成代理类,或代理对象。

代理对象

Foo f = (Foo) Proxy.newProxyInstance(Foo.class.getClassLoader(),
                                          new Class[] { Foo.class },
                                          handler);

代理类方式

     InvocationHandler handler = new MyInvocationHandler(...);
     Class proxyClass = Proxy.getProxyClass(
         Foo.class.getClassLoader(), new Class[] { Foo.class });
     Foo f = (Foo) proxyClass.
         getConstructor(new Class[] { InvocationHandler.class }).
         newInstance(new Object[] { handler });

常见用例

动态代理常被应用到以下几种情况中

数据库连接以及事物管理
单元测试中的动态Mock对象
自定义工厂与依赖注入(DI)容器之间的适配器
类似AOP的方法拦截器

相关文章

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • 安卓反射和动态代理的应用

    提纲 java反射基础 反射在Android中的应用 Java动态代理 动态代理在Android的应用 java反...

  • 一文带你搞懂Java反射和动态代理

    分享 Java反射和动态代理

  • Java 动态代理

    前言 关于动态代理 JDK动态代理 CGLIB动态代理 区别 java动态代理是利用反射机制生成一个实现代理接口的...

  • Java反射机制详解(二)

    本篇文章继续介绍Java反射机制,不同的是侧重于介绍动态代理。动态代理是代理模式中的一种,是通过Java反射机制来...

  • Java反射机制总结(二)

    本篇文章继续介绍Java反射机制,不同的是侧重于介绍动态代理。动态代理是代理模式中的一种,是通过Java反射机制来...

  • 快速上手 Kotlin 开发系列之动态代理

    本节介绍 Kotlin 中没有反射的动态代理。 Java 中的动态代理 在讲 Kotlin 的动态代理之前先简单回...

  • JAVA 反射(二)动态代理

    概念 在运行期间动态的创建接口的实现。通过生成的代理类,可以完成对接口的实现。 关键类和接口 处理接口方法的接口 ...

  • 2021校招 复习总结

    笔记导航: JAVA: 泛型 反射和动态代理 注解 JAVA多线程 ReentrantLock,Volatile,...

  • Java动态代理

    1、什么是动态代理 动态代理利用Java的反射技术(Java Reflection)生成字节码,在运行时创建一个实...

网友评论

      本文标题:JAVA 反射(二)动态代理

      本文链接:https://www.haomeiwen.com/subject/bfacmftx.html