spring的AOP(二)----JDK动态代理
来源:互联网 发布:淘宝购买送货入户 编辑:程序博客网 时间:2024/05/17 22:32
JDK动态代理在1.3的时候引入,其底层需要依赖一个工具类java.lang.reflect.Proxy和一个接口java.lang.reflect.InvocationHandler
JDK 动态代理 必须基于 接口进行代理
代码示例:
JdkProxyUtils.java
package com.my.jdkproxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;//对目标对象 创建 JDK 动态代理 (工具类)public class JdkProxyUtils implements InvocationHandler { // 代理目标对象 private Object target; public JdkProxyUtils(Object target) { this.target = target; } //通过invoke调用 目标对象 方法 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("执行JDK代理增强!!!!!!"); return method.invoke(target, args); // 调用目标对象方法 } // 为目标对象创建代理 public Object createProxy(){ // loader 目标对象类加载器 // interfaces 目标对象实现接口 // h 回调对象,需要invocationhandler 执行目标对象方法 return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), this); }}
UserDao.java
package com.my.jdkproxy;//用户操作接口public interface UserDao { public void save(); public void update(); public void delete();}
UserDaoImpl.java
package com.my.jdkproxy;//用户操作实现类public class UserDaoImpl implements UserDao { @Override public void save() { System.out.println("保存用户。。。"); } @Override public void update() { System.out.println("更新用户。。。"); } @Override public void delete() { System.out.println("删除用户。。。"); }}
Test.java
package com.my.jdkproxy;public class Test { // 没有代理编程 @org.junit.Test public void demo1(){ System.out.println("没有代理编程"); // 业务对象 UserDao userDao = new UserDaoImpl(); userDao.save(); userDao.update(); userDao.delete(); System.out.println("----------------"); } // 应用JDK动态代理 @org.junit.Test public void demo2(){ System.out.println(); System.out.println("应用JDK动态代理"); // 目标对象 UserDao userDao = new UserDaoImpl(); // 为目标对象 创建JDK动态代理 JdkProxyUtils jdkProxyUtils = new JdkProxyUtils(userDao);// 传入目标对象 UserDao proxy = (UserDao) jdkProxyUtils.createProxy(); // 必须根据接口创建代理 // 调用代理对象方法 proxy.save(); // 执行 InvocationHandler 的 invoke方法 proxy.update(); proxy.delete(); }}
运行结果:
阅读全文
0 0
- spring的AOP(二)----JDK动态代理
- JDK动态代理(Spring AOP理解的基础)
- Spring AOP JDK动态代理
- jdk动态代理&spring aop
- spring对AOP的支持(JDK的动态代理实现AOP和CGLIB实现AOP)
- Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC
- Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC
- 基于Spring AOP的JDK动态代理和CGLIB代理
- Spring之AOP的实现(JDK动态代理:只能代理接口,不能代理类)
- 自己实现Spring AOP(二)JDK代理实现AOP
- 理解Spring AOP 原理(二)JDK,CGLIB动态代理以及ProxyFactory
- 浅析Spring AOP源码(十三) jdk的动态代理和cglib的代理
- Aop的jdk动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Spring AOP的底层实现技术---JDK动态代理
- Android 获取View的坐标
- 算法学习----合并两个有序的链表
- TensorFlow学习笔记(一)
- web十大框架:
- POJ 1678 I Love this Game! 笔记
- spring的AOP(二)----JDK动态代理
- Cmake使用示例与整理
- 初读《黑客与画家》
- c#之线程同步浅析(1)-----轻量级同步Interlocked
- 关于crul无法链接https的问题
- Kotlin基础教程-包
- Java file 文件的相关使用
- 【Shader实战篇】PBR贴图之Metallic贴图
- 拉普拉斯分布