一。为何要用AOP
为了代码的复用我们将相同的方法抽出出来,通过继承的方法实现。但是有时候,相同的方法却不能抽取出来。
图中粗体代码是用来监测性能的。比如创建删除需要多少时间。这时候虽然他们都有
transManaget.beginTransaction(); 等方法,但是这些方法和业务紧密连接在一起。无法抽取出来。
代码关系,如图所示,这就像一个树的切面。这也是切面概念的由来。
抽取,继承采用的是纵向的方式,复用代码。
AOP,采用横向的方法抽取。把共同的代码抽取出来,使用的时候再织入在一起。
AOP的基本概念:
- 连接点:切点+方位
- 切点 :执行点,目标类的方法
- 方位:切点的前面还是后面
- 增强:逻辑代码+方位
- 目标对象:需要增强的目标类
- 引介
- 织入:将增强添加到目标类的过程
- 代理:添加了增强后的目标类(代理类)
- 切面:切点+增强=连接点+增强逻辑代码
连接点:方法前,方法后。这样的确定点。叫连接点。
切点:只能定位到某一个方法上。Pointcut
增强: 程序代码+方位。Advice
(方位+切点=连接点)
目标对象:目标类 target
引介:一种特殊的增强,为类添加属性和方法 Introduction
织入:1.编译器织入,需要特殊的JAVA编译器
2. 类装载器织入,需要特殊的类装载器。
3. 动态代理织入,为目标类添加增强生成子类。
代理:目标类被织入增强了,就产生了一个结果类。
切面:切面由切点和增强引入。
AOP的工作就是讲增强逻辑代码织入到目标对象的连接点上。