Java动态代理实现原理及使用示例

原创 £神魔★判官ぃ 2024-09-27 12:54 168阅读 0赞

Java动态代理是Java语言中的一种高级技术,它可以在运行时根据需要创建对象的代理。

实现原理:

  1. 使用java.lang.reflect.Proxy类,它是所有动态代理的基础。
  2. 创建一个实现了目标接口的类(被代理类)。
  3. 使用Proxy.newProxyInstance()方法,传入目标类、目标接口以及当前类的对象,返回代理对象。

使用示例:

  1. // 定义目标接口
  2. interface Target {
  3. void method();
  4. }
  5. // 定义被代理类,实现目标接口
  6. class RealTarget implements Target {
  7. @Override
  8. public void method() {
  9. System.out.println("Real target's method called");
  10. }
  11. }
  12. // 使用Proxy创建代理对象
  13. public class ProxyDemo {
  14. public static void main(String[] args) {
  15. // 获取被代理类的Class对象
  16. Class<RealTarget> clazz = RealTarget.class;
  17. // 创建目标接口的实现类
  18. Target proxyTarget = new MyInvocationHandler(new RealTarget());
  19. // 使用Proxy.newProxyInstance()方法创建代理对象
  20. Proxy targetProxy = Proxy.newProxyInstance(clazz.getClassLoader(), new Class[]{Target.class}}, proxyTarget);
  21. // 测试代理对象的方法
  22. targetProxy.method();
  23. }
  24. }
  25. // 实现MyInvocationHandler,处理动态代理的invocation事件
  26. class MyInvocationHandler implements InvocationHandler {
  27. private final RealTarget realTarget;
  28. public MyInvocationHandler(RealTarget realTarget) {
  29. this.realTarget = realTarget;
  30. }
  31. @Override
  32. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  33. // 在实际调用方法之前,可以在这里做一些处理,比如日志记录、权限检查等
  34. // 调用被代理类的方法
  35. return method.invoke(realTarget, args));
  36. }
  37. }

这个示例创建了一个动态代理,实现了Target接口的一个方法。在真实调用被代理对象方法前,可以在invoke方法中添加自己的逻辑。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

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

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

相关阅读

    相关 Java动态代理原理应用示例

    Java动态代理是一种在运行时生成对象的机制,它主要用于实现接口代理、行为拦截等功能。以下是动态代理的原理和一个简单的示例。 原理: 1. 使用`Proxy`类创建一个代理对