Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java动态代理的实现方式

作者:殘沫灕汐   发布日期:2025-08-07   浏览:103

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

// 定义一个接口
interface Hello {
    void sayHello();
}

// 实现该接口的类
class HelloImpl implements Hello {
    @Override
    public void sayHello() {
        System.out.println("Hello, world!");
    }
}

// 自定义InvocationHandler,用于处理方法调用
class HelloInvocationHandler implements InvocationHandler {
    private Object target;

    public HelloInvocationHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("Before method " + method.getName());
        Object result = method.invoke(target, args);
        System.out.println("After method " + method.getName());
        return result;
    }
}

public class DynamicProxyDemo {
    public static void main(String[] args) {
        // 创建目标对象
        Hello hello = new HelloImpl();

        // 创建代理对象
        Hello proxyInstance = (Hello) Proxy.newProxyInstance(
                hello.getClass().getClassLoader(),
                hello.getClass().getInterfaces(),
                new HelloInvocationHandler(hello));

        // 调用代理对象的方法
        proxyInstance.sayHello();
    }
}

解释说明

  1. 接口定义:首先定义了一个简单的接口 Hello,它包含一个方法 sayHello()
  2. 实现类:接着实现这个接口的类 HelloImpl,在其中实现了 sayHello() 方法。
  3. InvocationHandler 实现:创建了一个自定义的 InvocationHandlerHelloInvocationHandler,它会在方法调用前后打印日志信息。构造函数接收一个目标对象,并在 invoke 方法中通过反射调用目标对象的方法。
  4. 动态代理创建:在 DynamicProxyDemo 类中,使用 Proxy.newProxyInstance 方法创建了一个代理对象。这个代理对象实现了与目标对象相同的接口,并且所有方法调用都会被转发给 HelloInvocationHandlerinvoke 方法。
  5. 调用代理对象的方法:最后,通过代理对象调用 sayHello() 方法,可以看到代理对象在调用前后的日志输出。

这种方式就是 Java 动态代理的基本实现方式。

上一篇:java时间格式

下一篇:java中double保留两位小数

大家都在看

java连接数据库的代码

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java实体类转json字符串

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站