一个简单 JDK 动态代理的实例
Posted ✧*꧁一品堂.技术学习笔记꧂*✧.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个简单 JDK 动态代理的实例相关的知识,希望对你有一定的参考价值。
动态代理的步骤:
- 创建一个实现了 InvocationHandler 接口的类,必须重写接口里的 invoke()方法。
- 创建被代理的类和接口
- 通过 Proxy 的静态方法 newProxyInsatance(ClassLoader loader,Class[] interfaces,InvocationHandler,handler) 来创建一个代理
- 通过代理来调用方法
简单的动态代理实例
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 }
以上是关于一个简单 JDK 动态代理的实例的主要内容,如果未能解决你的问题,请参考以下文章