/**PageBeginHtml Block Begin **/ /***自定义返回顶部小火箭***/ /*生成博客目录的JS 开始*/ /*生成博客目录的JS 结束*/

一个简单 JDK 动态代理的实例

* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* @author Alan
* @Email no008@foxmail.com

 

正文

动态代理的步骤:

  1. 创建一个实现了 InvocationHandler 接口的类,必须重写接口里的 invoke()方法。
  2. 创建被代理的类和接口
  3. 通过 Proxy 的静态方法 newProxyInsatance(ClassLoader loader,Class[] interfaces,InvocationHandler,handler) 来创建一个代理
  4. 通过代理来调用方法

简单的动态代理实例

复制代码
  1 package com.sean.zzzjvm;
  2 
  3 import java.lang.reflect.InvocationHandler;
  4 import java.lang.reflect.Method;
  5 import java.lang.reflect.Proxy;
  6 
  7 /** * * @Author Sean * @Date 2017/8/20 21:43. * @Version */
  8 public class DynamicProxyTest {
  9 
 10     // 定义一个接口
 11     interface IHello{
 12         void sayHello();
 13     }
 14 
 15     // 实现该接口的类
 16     static class Hello implements IHello{
 17 
 18         @Override
 19         public void sayHello() {
 20             System.out.println("hello world");
 21         }
 22     }
 23 
 24     // 创建一个动态代理类,实现 InvocationHandler 接口
 25     static class DynamicProxy implements InvocationHandler{
 26         Object originalObj;
 27 
 28         // 创建一个代理的方法,在 new DynamicProxy().bind(new Hello()); 执行
 29         Object bind (Object originalObj){
 30             this.originalObj = originalObj;
 31             // 返回一个代理对象
 32             return Proxy.newProxyInstance(originalObj.getClass().getClassLoader(),
 33                     originalObj.getClass().getInterfaces(),this);
 34         }
 35 
 36         // 默认重写的方法,在 hello.sayHello() 执行
 37         @Override
 38         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
 39             System.out.println("welcome");
 40             return method.invoke(originalObj,args);
 41         }
 42     }
 43 
 44     public static void main(String[] args){
 45         // IHello hello = new Hello();
 46         // 调用动态代理的方法
 47          IHello hello = (IHello) new DynamicProxy().bind(new Hello());
 48         hello.sayHello();
 49     }
 50 
 51 }
复制代码
posted @   一品堂.技术学习笔记  阅读(206)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示

目录导航