java动态代理实现demo
2021/10/20 11:10:27
本文主要是介绍java动态代理实现demo,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.创建接口:
/** * @author JingZhe @time 2021/10/20 9:45 */ public interface Person { /** 测试方法 */ void doSomething(); }
2.创建接口的实现类:
/** * @author JingZhe @time 2021/10/20 9:48 */ public class JingZhe implements Person { @Override public void doSomething() { System.out.println("jingZhe doing Something"); } }
3.创建动态代理类:
import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * @author JingZhe @time 2021/10/20 9:44 */ public class JDKDynamicProxy implements InvocationHandler { /** 声明被代理的对象 */ private Person person; /** 构造函数 */ public JDKDynamicProxy(Person person) { this.person = person; } /** 获取代理对象 */ public Object getProxy() { Object proxyInstance = Proxy.newProxyInstance(person.getClass().getClassLoader(), person.getClass().getInterfaces(), this); return proxyInstance; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("对原方法进行了前置增强"); // 原方法执行 Object invoke = method.invoke(person, args); System.out.println("对原方法进行了后置增强"); return invoke; } }
4.编写测试类:
/** * @author JingZhe @time 2021/10/20 9:46 */ public class proxyTest { public static void main(String[] args) { System.out.println("不使用代理类,调用doSomething"); Person person = new JingZhe(); person.doSomething(); System.out.println("--------------------------"); System.out.println("使用代理类,调用doSomething"); Person proxy = (Person) new JDKDynamicProxy(new JingZhe()).getProxy(); proxy.doSomething(); } }
测试结果:
不使用代理类,调用doSomething jingZhe doing Something -------------------------- 使用代理类,调用doSomething 对原方法进行了前置增强 jingZhe doing Something 对原方法进行了后置增强
以上。
这篇关于java动态代理实现demo的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-29DataGrip使用ssh连接数据库的操作流程
- 2024-05-28SpringBoot3.2更新声明!
- 2024-05-28中外程序员到底有啥区别?
- 2024-05-25外企也半夜发布上线吗?
- 2024-05-24鸿蒙原生应用再新丁!芒果TV 入局鸿蒙
- 2024-05-22基本概念
- 2024-05-22检索数据
- 2024-05-22排序数据
- 2024-05-22基础过滤数据
- 2024-05-22通过逻辑操作符过滤数据