Java动态代理原理及应用实例

原创 待我称王封你为后i 2024-12-13 10:00 97阅读 0赞

Java动态代理是一种在运行时生成对象的机制,主要通过java.lang.reflect包下的Proxy和InvocationHandler两个类来实现。

原理:

  1. 创建一个 InvocationHandler 实现者。
  2. 使用 Proxy 类创建一个动态代理对象,并将之前创建的 InvocationHandler 作为参数传递给 Proxy 构造方法。
  3. 当调用这个动态代理对象的方法时,实际上会通过 InvocationHandler 进行转发和处理。

应用实例:
以下是一个简单的代理对象示例,它实现了对目标方法的重写:

  1. // 目标类
  2. public class Target {
  3. public int sayHello() {
  4. return 10;
  5. }
  6. }
  7. // 代理类(InvocationHandler)
  8. public class ProxyHandler implements InvocationHandler {
  9. private Target target;
  10. // 设置目标对象
  11. public void setTarget(Target target) {
  12. this.target = target;
  13. }
  14. @Override
  15. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  16. System.out.println("Before calling target method...");
  17. // 调用目标方法
  18. int result = target.sayHello();
  19. System.out.println("After calling target method...");
  20. return result;
  21. }
  22. }
  23. // 使用动态代理
  24. public class Client {
  25. public static void main(String[] args) {
  26. Target target = new Target();
  27. ProxyHandler handler = new ProxyHandler(target);
  28. // 创建动态代理对象
  29. Proxy proxy = (Proxy) Proxy.newProxyInstance(
  30. target.getClass().getClassLoader(),
  31. target.getClass().getInterfaces(),
  32. handler
  33. );
  34. // 调用动态代理对象的方法
  35. int result = proxy.invoke(target, null));
  36. System.out.println("Result: " + result);
  37. }
  38. }

在这个例子中,我们创建了一个Target类,它有一个方法sayHello()。然后我们创建了ProxyHandler作为代理的实现,这个处理器会重写目标方法。

最后在Client类中,我们创建了一个动态代理对象,并通过它调用目标方法,结果会被打印出来。

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

发表评论

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

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

相关阅读

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

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

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

    Java动态代理是Java语言特性的一种体现,它能够不修改原有代码的情况下,增加新的功能。其原理主要基于Java的反射机制和代理模式。 具体步骤如下: 1. 通过反射创建目