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

java动态代理

作者:千山暮雪ミ   发布日期:2025-09-20   浏览:39

// Java动态代理示例代码

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

// 定义一个接口
interface Service {
    void execute();
}

// 实现该接口的类
class RealService implements Service {
    @Override
    public void execute() {
        System.out.println("Executing RealService");
    }
}

// 创建一个InvocationHandler来处理代理对象的方法调用
class DynamicProxyHandler implements InvocationHandler {
    private final Object realSubject;

    public DynamicProxyHandler(Object realSubject) {
        this.realSubject = realSubject;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 在方法执行前做一些操作
        System.out.println("Before method: " + method.getName());

        // 调用实际对象的方法
        Object result = method.invoke(realSubject, args);

        // 在方法执行后做一些操作
        System.out.println("After method: " + method.getName());

        return result;
    }
}

public class DynamicProxyExample {
    public static void main(String[] args) {
        // 创建实际对象
        Service realService = new RealService();

        // 创建动态代理对象
        Service proxyService = (Service) Proxy.newProxyInstance(
            realService.getClass().getClassLoader(),
            realService.getClass().getInterfaces(),
            new DynamicProxyHandler(realService)
        );

        // 通过代理对象调用方法
        proxyService.execute();
    }
}

解释说明:

  1. 接口定义:我们首先定义了一个 Service 接口,它包含一个 execute 方法。
  2. 实现类RealService 类实现了 Service 接口,并提供了具体的实现逻辑。
  3. InvocationHandlerDynamicProxyHandler 类实现了 InvocationHandler 接口。它负责拦截对代理对象的所有方法调用,并在调用前后执行自定义逻辑。
  4. 创建代理对象:在 DynamicProxyExample 类中,我们使用 Proxy.newProxyInstance 方法创建了一个动态代理对象。这个代理对象会拦截所有对 execute 方法的调用,并通过 DynamicProxyHandler 来处理这些调用。
  5. 方法调用:最后,我们通过代理对象调用 execute 方法,观察到在方法执行前后会有额外的日志输出。

通过这种方式,Java 动态代理允许我们在不修改原始代码的情况下,灵活地添加额外的功能或行为。

上一篇:java 获取当前日期

下一篇:java string format

大家都在看

java连接数据库的代码

java djl

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java发送qq邮件

java 判断

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

Laravel 中文站