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

jdk动态代理实现

        jdk动态代理是比较常用的一种代理实现,它是基于接口的代理。它只能在运行时为接口生成代理对象,所有方法调用都通过一个统一的InvocationHandler处理,是Java标准库自带的代理机制。核心要点:

  1. 必须要有接口

  2. 运行时动态生成

  3. 通过InvocationHandler统一拦截

  4. JDK自带,无需第三方库

         下面的案例简单的进行了实现。

1.接口

    interface Foo{void foo();}

2.目标类

    static class Target implements Foo{public void foo(){System.out.println("target foo");}}

3.jdk代理创建以及调用

 //目标对象Target target = new Target();//用来加载在运行期间动态生成的字节码ClassLoader loader = testJdkProxy.class.getClassLoader();Foo proxy = (Foo) Proxy.newProxyInstance(loader,new Class[]{Foo.class},(p,method,params)->{System.out.println("before");//目标 方法(参数)// 方法.invoke(目标,参数);Object result = method.invoke(target,params);System.out.println("after");return result;//让代理返回目标方法执行的结果});proxy.foo();

   1)创建目标对象

   2) 获取classLoader

   3)生成代理对象

    设置创建代理需要的参数,同时通过匿名内部类实现InvocationHandler里面的方法进行目标类方法调用前后的增强逻辑处理,目标类方法的调用是通过反射进行。最后返回调用结果。

   4)代理对象调用目标方法进行增强

   5)总体代码实现

package com.example.demo2.b07;import java.lang.reflect.Proxy;/*** @author zhou* @version 1.0* @description TODO* @date 2025/10/25 22:21*/
public class testJdkProxy {interface Foo{void foo();}static class Target implements Foo{public void foo(){System.out.println("target foo");}}public static void main(String[] args) {//目标对象Target target = new Target();//用来加载在运行期间动态生成的字节码ClassLoader loader = testJdkProxy.class.getClassLoader();Foo proxy = (Foo) Proxy.newProxyInstance(loader,new Class[]{Foo.class},(p,method,params)->{System.out.println("before");//目标 方法(参数)// 方法.invoke(目标,参数);Object result = method.invoke(target,params);System.out.println("after");return result;//让代理返回目标方法执行的结果});proxy.foo();}
}

4.结果

        对目标类的方法进行了前后增强。

http://www.dtcms.com/a/529404.html

相关文章:

  • 响应式网站一般怎么设计网站主要盈利模式
  • 【C++】C++ 中的 map
  • 4. Qt 元对象系统 属性系统
  • 阿里云 有企业 网站吗做网站找云无限
  • 策划网站建设价格三水 网站建设
  • C++容器array
  • 智能仓储物流6大系统OMS、WES、WMS、WCS、AGV、数字孪生技术,到底都管什么?
  • 徐州专门做网站百度指数怎么用
  • 多目标优化领域前沿创新亮点
  • 长春网站推广南宁建设学院官网
  • 上海企业建站费用空白网站建设
  • Java—枚举类
  • 【NestJS】深入理解NestJS装饰器原理
  • 网站设计师接单网站建设的大概费用
  • 俐侎族网站建设背景wordpress自动修改图
  • 西双版纳网站建设公司国内最大的域名交易平台
  • 湘潭市建设工程质量监督站网站微信推广朋友圈广告
  • 企业网站网址化工企业网站模板 aspx
  • 知识图谱构建流程与技术架构
  • 重庆手机网站制作wordpress 4.2.8
  • 16 Electron 应用自动更新方案:electron-updater 完整指南
  • 手机网站页面如何制作软件商贸有限公司企业简介
  • 重庆长寿网站设计公司哪家好做酒店管理网站的作用
  • 【系统分析师】高分论文:论需求分析及其应用(配网运维管控项目)
  • 大专计算机技术专业就业方向:解读、规划与提升指南
  • 如何在手机上做网站用dreamware制作网页
  • C# 可空类型
  • 数据结构12:二叉树的API及其实现
  • 用c 建网站时怎么做导航菜单栏访问升级每天自动更新
  • 江门做网站设计wordpress通用页面模板