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

java 动态代理

作者:潮起潮落   发布日期:2025-04-18   浏览:102

// 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 MyInvocationHandler implements InvocationHandler {
    private final 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 method: " + method.getName());
        Object result = method.invoke(target, 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 MyInvocationHandler(realService));

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

解释说明:

  1. 接口定义Service 是一个简单的接口,包含一个 execute() 方法。
  2. 实现类RealService 实现了 Service 接口,并在 execute() 方法中输出一条消息。
  3. 自定义 InvocationHandlerMyInvocationHandler 实现了 InvocationHandler 接口,重写了 invoke() 方法。在这个方法中,我们可以在目标方法执行前后添加额外的逻辑(如日志记录)。
  4. 动态代理创建:通过 Proxy.newProxyInstance() 方法创建了一个代理对象 proxyService,它实现了与 RealService 相同的接口。
  5. 调用代理对象的方法:当调用 proxyService.execute() 时,实际上会触发 MyInvocationHandler 中的 invoke() 方法,从而实现对方法调用的拦截和增强。

这段代码展示了如何使用 Java 的动态代理机制来拦截和增强方法调用。

上一篇:java equalsignorecase

下一篇:java枚举类型enum用法和写法

大家都在看

java连接数据库的代码

ubuntu 卸载java

java sort用法

java collections.sort

java file类的方法

java 判断

java时间数据类型

java 时间加一天

java demo

java 截取

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

Laravel 中文站