Java 面试题
目录

Java 中实现动态代理的方式有哪些?(例如:JDK 动态代理,CGLIB)

· 约 5 分钟读完 · 第 37 / 274 章

推荐答案

在 Java 中,实现动态代理的方式主要有以下两种:

  1. JDK 动态代理:基于接口的动态代理,使用 java.lang.reflect.Proxy 类和 java.lang.reflect.InvocationHandler 接口来实现。
  2. CGLIB 动态代理:基于类的动态代理,使用 CGLIB 库来生成目标类的子类,从而实现代理。

本题详细解读

JDK 动态代理

JDK 动态代理是 Java 标准库提供的一种动态代理机制,它只能代理实现了接口的类。JDK 动态代理的核心是 Proxy 类和 InvocationHandler 接口。

实现步骤

  1. 定义一个接口。
  2. 实现该接口的目标类。
  3. 实现 InvocationHandler 接口,编写代理逻辑。
  4. 使用 Proxy.newProxyInstance() 方法创建代理对象。

示例代码

CGLIB 动态代理

CGLIB(Code Generation Library)是一个强大的高性能代码生成库,它可以在运行时扩展 Java 类和实现接口。CGLIB 动态代理通过生成目标类的子类来实现代理,因此它不需要目标类实现接口。

实现步骤

  1. 定义一个目标类。
  2. 实现 MethodInterceptor 接口,编写代理逻辑。
  3. 使用 Enhancer 类创建代理对象。

示例代码

总结

  • JDK 动态代理:适用于代理实现了接口的类,使用标准库,无需引入第三方依赖。
  • CGLIB 动态代理:适用于代理没有实现接口的类,需要引入 CGLIB 库,性能通常优于 JDK 动态代理。

根据具体需求选择合适的动态代理方式。