感谢和部分素材来源于:https://www.jianshu.com/p/dca3e2c8608a

说真的,工作一年了,最开始对于这三个玩意印象真的不是很深刻,因为就我个人作为做业务的打工仔来说,单单是apt的使用都是在重构的时候强行给自己加戏才用到的。但是,嘛,我对于这些聪明人为什么要特地发明这么多,生僻而装逼的名词倍感兴趣。我的职责就是尝试以简单的语言来讲清楚这些玩意到底是什么东西,虽然很多时候在我脑子里也是一团浆糊,但是脑子里一团浆糊的感觉实在不是很让人愉快的事情,所以这里还是打算一点点来拓宽我的认知边界。

这三个概念都是AOP相关的概念,那么AOP到底是什么,一句话来说,很多地方有很多重复的逻辑,这些逻辑所在的位置存在一定的规律,所以,我们让代码自主生成和管理这些重复的逻辑,来达到让我们更好地维护项目的目的。

好像还是没有解释清楚,AOP到底是什么,往往理解这种概念的时候,千万不要陷进去,要尽可能从宏观的角度上来看待这一切。AspectJ中的四个术语:

Advice(通知):典型的 Advice 类型有 before、after 和 around,分别表示在目标方法执行之前、执行后和完全替代目标方法执行的代码。

Joint point(连接点):程序中可能作为代码注入目标的特定的点和入口。

Pointcut(切入点):告诉代码注入工具,在何处注入一段特定代码的表达式。

Aspect(切面):Pointcut 和 Advice 的组合看做切面。例如,在本例中通过定义一个 pointcut 和给定恰当的advice,添加一个了内存缓存的切面。

Weaving(织入):注入代码(advices)到目标位置(joint points)的过程。

这四个术语所起到的作用就是按照规律找到需要注入代码的位置,并注入代码,仅此而已。

基于此,我为什么说AOP的三个工具的思想完全一致呢?就拿APT而言,APT的常见手段就是基于注解。

注解在此的作用为:提供生成类所必须的信息(相当于提供后续注入代码时所注入的具体内容)

于此相对的,注解处理器的作用为:获取到注解所持有的信息,注解处理器对于每种类型的注解,都会提供不同的处理方式,即注解处理器负责提供根据注解信息生成的类的注入位置,并且负责执行注入操作。(相当于Weaving操作,完全一样有没有= =)

而这三个专有名词则是负责不同时期的代码生成和修改工作的:这个博主画的图就很有说服性。

开发日记-20190430 关键词 apt,aspectj,javassist相关推荐

  1. 开发日记-20190513 关键词 汇编语言(六)

    其实,每次当我写一篇开发日记,并且这篇开发日记并没有关键词,或者我并没有和你扯东扯西的情况下... 这意味着我这天偷懒了= = ;AddTwo.asm --两个32位整数相加.386.model fl ...

  2. 开发日记-20190328 关键词 利用eolinker一键快速生成API接口文档

    今天感觉效率真的很低= =各个层面的,apk发布到现场发现出现了问题,所以一个下午都在忙着解决现场出现的问题,领导一直打电话询问进度,午觉也没有睡所以今天预计的很多计划都处于停滞状态,像昨天规划的今天 ...

  3. 开发日记-20190423 关键词 模块化完整方案实现 blog读后感

    20190423-开发日记 关键词 模块化完整方案实现 blog读后感 参考并感谢: Android 模块化完整方案实现 https://blog.csdn.net/yalinfendou/artic ...

  4. 开发日记-20190516 关键词 MVVM-代码浏览结束

    今天生病了呢=+=.其实今天预计将所有的MVVM都做完的,但是就结果而言,并没有想象中来的简单.嘛嘛嘛,不过基本的想法也已经掌握了,感觉Kotlin真的挺不错的,不过仅仅是作为一门开发语言而言.但是作 ...

  5. 开发日记-20190512 关键词 Dagger2原理

    我记得我之前在日记里说过要写一篇关于dagger的文章,今天,恰好,网络炸了,有点时间来玩玩这些有意思的事情,表示,终于有机会将这些以前没有填上的大坑填上,自己的内心真的好开心,毕竟拖延症是很多人的习 ...

  6. 开发日记-20190425 关键词 gradle基础学习 7年之约 启动篇

    以前,面试过一家外企,面试我的技术主管真的很友善,完全是以一种技术交流的态度和我进行交流.说真的,那时候,我一度以为我已经大半只脚踏入了这家企业的大门,他们的hr和我说,我们一个星期内将会给你答复.但 ...

  7. 开发日记-20190417 关键词 代码之间耦合度的一刀两断 (思路篇)

    就目前而言,就我的理解,为什么要设计结构清晰的代码呢,因为结构清晰的代码往往耦合度很低,那为什么要降低代码之间的耦合度呢,当然是因为程序员是一种喜爱偷懒和害怕犯无意义错误的一种生物,那么该怎么办呢,无 ...

  8. 开发日记-201909024 关键词 linux基础

    这两个月出差,8点下班,所以需要在这个点之前,把日记写好,事情一多,其实就没有多少时间归纳了. 所以就以转载为主,不过这些转载内容都是我个人阅读完的内容,还是很有信心的. 用linux制作iso镜像文 ...

  9. 开发日记-20190822 关键词 读书笔记《Unix环境高级编程(第二版)》《掌控习惯》DAY 2

    Preface 话说,昨天开始尝试着去改变自己,从基础的习惯开始,11:30准时睡觉,平时差不多12:30才睡觉.按理说,比平时早了一个小时睡觉吧,然后我就把闹钟提前了45分钟,想着还能比平常多睡15 ...

最新文章

  1. [unreal4入门系列之九] UE4创建空白关卡并添加碰撞体
  2. 未解决ora-01034、ora-03113、oracle使用RMAN删除归档日志
  3. MCMC笔记:齐次马尔可夫链
  4. 是什么引起数据中心机房事故频发,是天灾还是人祸?
  5. jQuery的Ajax方法
  6. [外文理解] DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构。
  7. 【机器学习】手把手用AI算法实现冰雪奇缘中的“冰雪魔法”
  8. NS2安装笔记 - Ubuntu9.10
  9. 从Client应用场景介绍IdentityServer4(一)
  10. Android中ImageView的旋转与缩放
  11. mongodb 导出txt_(干货)前端实现导出excel的功能
  12. 配置cacti 监控squid
  13. 关于MFC下多线程,在线程中创建非模态对话框以及消息传递
  14. cad查看_天正电气CAD教程之标注实例讲解
  15. bat 一键清理系统垃圾的修改
  16. Unity 移动方法总结
  17. R语言入门-常用的向量运算
  18. SQL Server manager studio(SSMS)安装教程
  19. 怎样把两个excel表格合并
  20. 植物大战僵尸二:游戏界面的绘制

热门文章

  1. nrf52840开发套件_nRF52840蓝牙5.0模块有几个突出的优势
  2. linux php-fpm启动失败,linux运行php-fpm遇到问题
  3. ie 打开后端发过来的pdf_某办公软件PDF阅读器漏洞挖掘及Crash分析
  4. php手册数组函数,PHP - Manual手册 - 函数参考 - Array 数组函数 - array_diff计算数组的差集...
  5. 非平衡电桥电阻计算_什么是RTD热电阻?两线制和三线制RTD有什么不同?
  6. mysql为查询结果字段赋默认值
  7. tp3.2.3保持搜索条件的分页
  8. 做了5年Java,java读写锁使用
  9. java数组长度怎么看,威力加强版
  10. 逆误差函数:torch.erfinv