------------------------------------ 剩下的时间不多了,抓经做自己想做的吧

AOP: 专业术语叫做面向切面的编程

为什么要使用aop: 为了简化代码, 将相同代码抽离处理, 然后在再使用所谓切面, 将这些功能加入进去

将这个抽离出来的功能叫做 advice(增强方法)(在什么地方干什么事情), 问题来了:这个advice 我应该放在类的哪些地方呢?

答: 在类的方法的前后,或者异常的抛出点,你都可以将这些advice 放在这些地方

上面这些可供advice 存放的地方,就叫做 “引入点”

现在我将advice 插入到 某一个“引入点”, 那么这个“引入点” 就叫做 “插入点”

所以 “引入点” 和 “插入点” 之间是不同时期的同一个东西的叫法, 在没有引入advice 的时候这个叫做 “引入点”

引入“advice” 的时候, 这个叫做 “插入点”;

那现在上面确定, 在某一个具体的地方 “插入点” , 在什么时候干什么事情(advice) , 这个就被专业人士定义为“切面”。

白话描述 “切面”: 我现在手握增强剂, 我在 你睡觉前给你打, 这个就叫切面, 就是 你在什么地方,什么时间,干什么事情。、

那么现在我如何使用这个切面, 而且还是在不改变原有类的基础上,让整个程序不知道的基础悄悄的就给你进行了加强处理?

答: 我现在去找一个伪装者,伪装成你原来的样子,然后让JVM 发现不了,我先在已经将你进行替换了,

在 java 里面如何实现呢? 可以使用多态,实现原来的上一层接口,相当于给这个类找了一个兄, 这个在接口编程的世界里面

兄弟就可以不知不觉的替换掉了,这个“伪装者” 成功替换, 加强了原来的方法,还是在原有方法不知道的基础上

上面这些白话 就是 JDK动态代理,限制条件就是被加强的类,必须要有一个上层的接口

如果这个类没有这个上层接口怎么办, 本身就是一个孤家寡人怎么办?

答: 我还是去找一个“伪装者” ,但是这个这个伪装者的身份不是 “兄弟“ 而是 “儿子”, 就是继承这个类

然后悄悄的给他加强。

上面的这种就是 CGLIB 动态代理

所以通过上面可以发现: AOP的实现是基于动态代理实现的

最新文章

  1. 【代码笔记】iOS-设置textView或者label的行间距方法
  2. Unity3D——键盘控制移动
  3. model的封装+MJExtension 方便后续处理
  4. WebService的原理和过程
  5. PHP无法获取Referer问题排查
  6. Unit Of Work之我见
  7. Asp.Net Boilerplate Project (ABP) 视频教程
  8. angularjs1.x版本,父子组件之间的双向绑定
  9. python进程和线程(五)
  10. 借助表达式树感受不一样的CRUD
  11. 怎样检测TCP/UDP端口的连通性
  12. 中性SNP的突变年龄评估(estimate the average age of a neutral two-allele polymorphism)
  13. CrackME 2011 # 2 逆向练习解题思路
  14. Zookeeper客户端Curator基本API
  15. 【php增删改查实例】第二十节 - 把用户管理页面集成到main.php中
  16. svn数据库自动备份脚本
  17. Maven install [WARNING] The artifact aspectj:aspectjrt:jar:1.5.4 has been relocated to org.aspectj:aspectjrt:jar:1.5.4
  18. curl命令大全
  19. e776. 设置JList组件项的提示语
  20. python函数嵌套的实用技术

热门文章

  1. 重置Rhapsody超级管理员administrator的密码
  2. 关于js如果控制标签的字符长度
  3. 自荐一个 element 表单代码生成器
  4. $CH5104\ I-country$ 线性$DP$
  5. 使用Theia——创建扩展包
  6. j接近50道经典SQL练习题,附建表SQL解题SQL
  7. win10开启我的第一个32位汇编程序
  8. virtualenv虚拟环境使用及介绍
  9. mysql-5.7.9-winx64遇坑记
  10. DZNEmptyDataSet框架阅读