欢迎光临散文网 会员登陆 & 注册

Java 如何实现动态代理?

2023-02-22 23:23 作者:码农青年  | 我要投稿

动态代理是一种运行时生成代理类的机制,能够在代理类中处理被代理类的方法调用。Java中的动态代理主要通过 java.lang.reflect 包中的 Proxy 类和 InvocationHandler 接口来实现。

首先,我们需要编写一个 InvocationHandler 接口的实现类来实现具体的代理逻辑。以下是一个简单的例子:

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

public class MyInvocationHandler implements InvocationHandler {
    private Object target;

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

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

这里的 MyInvocationHandler 类实现了 InvocationHandler 接口,并通过构造函数传入一个被代理对象。在 invoke 方法中,我们可以对被代理对象的方法调用进行处理。

接下来,我们可以使用 Proxy 类来生成代理对象。以下是一个示例:

import java.lang.reflect.Proxy;

public class Main {
    public static void main(String[] args) {
        // 创建被代理对象
        RealSubject realSubject = new RealSubject();

        // 创建代理对象
        MyInvocationHandler handler = new MyInvocationHandler(realSubject);
        Subject proxy = (Subject) Proxy.newProxyInstance(RealSubject.class.getClassLoader(),
                RealSubject.class.getInterfaces(),
                handler);

        // 调用代理对象的方法
        proxy.request();
    }
}

这里,我们使用 Proxy.newProxyInstance 方法创建代理对象,传入类加载器、被代理对象实现的接口以及实现了 InvocationHandler 接口的 MyInvocationHandler 对象。最后,我们调用代理对象的方法来触发代理逻辑。

总之,Java中实现动态代理的方式是使用 Proxy 类和 InvocationHandler 接口来生成代理类,并通过代理类来处理被代理对象的方法调用。


Java 如何实现动态代理?的评论 (共 条)

分享到微博请遵守国家法律