博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
探秘AOP实现原理
阅读量:6877 次
发布时间:2019-06-26

本文共 970 字,大约阅读时间需要 3 分钟。

  可以这么说,AOP是基于动态代理实现的。

  那么,这个过程是怎样的?

  首先,我们有这样的一个Service类,它是被作为切面的一个类:

  public class Service implements User {

  public void addUser(){

  System.err.println(模拟增加用户);

  }

  }

  它实现了User接口,因为我们要使用JDK动态代理来实现这个过程,所以必须要实现这样一个接口。

  然后,我们生成一个代理对象:

  var service=(User)Proxy.newProxyInstance(Service.class.getClassLoader(),new Class[]{User.class}, new Handler(new Service()));

  这里需要实现一个handler:

  public class Handler implements InvocationHandler {private User target;public Handler(User target) {this.target=target;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.err.println(模拟日志记录);return method.invoke(target,args);}}

  这个handler的作用是负责方法调用前的逻辑处理,

  我们运行一下:

  service.addUser();

  可以看到会在addUser方法调用前执行日志记录,那么我们在Service类中增加一个方法:

  public void delUser(){System.err.println(模拟删除用户);}

  也可以看到日志记录是正常工作的,那么我们梳理一下AOP的实现过程:使用动态代理生成一个目标对象的代理对象,然后这个代理对象在调用目标对象之前总会执行特定的方法调用前逻辑。

转载于:https://juejin.im/post/5c99d7526fb9a070ee429971

你可能感兴趣的文章
二叉树(2)——遍历的非递归实现
查看>>
OS X 键盘快捷键
查看>>
linux下vi命令大全
查看>>
设计模式之四:访问者模式
查看>>
加密和解密
查看>>
python使用.proto文件生成service接口失败
查看>>
判断矩形是否在矩形中
查看>>
关于composer.json中require-dev和require-dev、autoload-dev和autoload的区别
查看>>
Android自定义权限
查看>>
网页展现pdf
查看>>
git的一些命令
查看>>
C#微信公众平台自定义菜单小工具
查看>>
Maven POM 元素参考表
查看>>
结巴分词-深入
查看>>
nginx利用image_filter动态生成缩率图
查看>>
使用POI读取excel文件内容
查看>>
【解决】An internal error occurred during: "Launchi...
查看>>
处理slave(低版本)复制master(高版本)产生的error 1236
查看>>
Vim(gvim)配色方案推荐
查看>>
变量的直接调整运用${variable # 或% }
查看>>