当前位置: 首页 > news >正文

手写JDK动态代理实现AOP

以下是一个简单的例子,展示了如何使用JDK动态代理来实现AOP中的前置通知(Before Advice)。

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

import java.util.Arrays;

// 定义一个前置通知的接口

interface BeforeAdvice {

    void before(Object proxy, Method method, Object[] args);

}

// 实现InvocationHandler接口

class MyInvocationHandler implements InvocationHandler {

    private Object target; // 目标对象

    private BeforeAdvice beforeAdvice; // 前置通知

    public MyInvocationHandler(Object target, BeforeAdvice beforeAdvice) {

        this.target = target;

        this.beforeAdvice = beforeAdvice;

    }

    @Override

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        // 调用前置通知

        beforeAdvice.before(proxy, method, args);

        // 调用目标方法

        return method.invoke(target, args);

    }

}

// 测试目标对象

class MyTarget {

    public void myMethod(String message) {

        System.out.println("Target method called with: " + message);

    }

}

// 测试前置通知

class MyBeforeAdvice implements BeforeAdvice {

    @Override

    public void before(Object proxy, Method method, Object[] args) {

        System.out.println("Before advice: Method = " + method.getName() + ", Args = " + Arrays.toString(args));

    }

}

public class JdkDynamicProxyExample {

    public static void main(String[] args) {

        MyTarget target = new MyTarget(); // 创建目标对象

        BeforeAdvice beforeAdvice = new MyBeforeAdvice(); // 创建前置通知

        InvocationHandler handler = new MyInvocationHandler(target, beforeAdvice); // 创建调用处理器

        // 创建代理类

        MyTarget proxy = (MyTarget) Proxy.newProxyInstance(

                target.getClass().getClassLoader(), // 类加载器

                target.getClass().getInterfaces(),   // 目标对象的接口

                handler                              // 调用处理器

        );

        // 通过代理调用方法

        proxy.myMethod("Hello, Proxy!");

    }

}

这段代码首先定义了一个BeforeAdvice接口和一个实现了InvocationHandler接口的MyInvocationHandler类。在MyInvocationHandler中,它在调用目标方法前调用了前置通知的before方法。然后,通过Proxy.newProxyInstance方法创建了一个代理类,并通过代理类调用了目标对象的方法。这个例子展示了如何使用JDK动态代理来实现简单的AOP功能。


http://www.mrgr.cn/news/71240.html

相关文章:

  • STM32(hal库)在串口中,USART和uart有什么区别?
  • 如何将Nop平台与Solon框架集成
  • 计算机网络易混淆知识点串记
  • C++开发基础之使用librabbitmq库实现RabbitMQ消息队列通信
  • docker配置代理解决不能拉镜像问题
  • Docker使用docker-compose一键部署nacos、Mysql、redis
  • 深入浅出 ChatGPT 底层原理:Transformer
  • 小型内衣洗衣机哪个牌子好?五大超值优等品速来围观!
  • 工业拍卖平台、信息发布、租赁商城平台系统适用于全行业解决方案。
  • ChatGPT登录失败的潜在原因分析
  • 【go从零单排】Random Numbers、Number Parsing
  • 遥感大数据智能分析与应用
  • GreenDao适配AGP8.7+
  • 131页PPT企业架构战略:提升研发营销供应链及客户服务
  • kafka可视化管理平台-kafka-console-ui
  • Java 文件操作与基本输入输出流详解
  • 「QT」QT5程序设计专栏目录
  • 丹摩征文活动 | SD3+ComfyUI的图像部署实践
  • http(s)接口设计注意事项
  • 【MATLAB源码-第291期】基于matlab的AMI编码解码系统仿真,输出各个节点波形。
  • 2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell图解步骤
  • 【机器学习】K近邻算法
  • 7天用Go从零实现分布式缓存GeeCache(学习)(3)
  • CTF-RE 从0到N: windows反调试-获取Process Environment Block(PEB)信息来检测调试
  • Go开发指南-Gin与Web开发
  • android studio 配置过程