第五节 基于注解的AOP
1、AOP概念介绍
①名词解释
②AOP的作用
2、基于注解的AOP用到的技术
3、实验操作
4、小结

第五节 基于注解的AOP

1、AOP概念介绍

①名词解释

AOP:Aspect Oriented Programming面向切面编程
AOP可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。
AOP技术恰恰相反,它利用一种称为”横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为”Aspect”,即切面。所谓”切面”,简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。
使用AOP,可以在不修改原来代码的基础上添加新功能。

②AOP的作用

下面两点是同一件事的两面,一枚硬币的两面:

  • 简化代码:把方法中固定位置的重复的代码抽取出来,让被抽取的方法更专注于自己的核心功能,提高内聚性。
  • 代码增强:把特定的功能封装到切面类中,看哪里有需要,就往上套,被套用了切面逻辑的方法就被切面给增强了。

2、基于注解的AOP用到的技术

05.基于注解的AOP - 图1
./images

  • 动态代理(InvocationHandler):JDK原生的实现方式,需要被代理的目标类必须实现接口。因为这个技术要求代理对象和目标对象实现同样的接口(兄弟两个拜把子模式)。
  • cglib:通过继承被代理的目标类(认干爹模式)实现代理,所以不需要目标类实现接口。
  • AspectJ:AspectJ 是一个基于 Java 语言的 AOP 框架,它 扩展了 Java 语言,提供了一个专门的编译器,在编译时提供横向代码的植入,生成遵守Java字节编码规范的Class文件。Spring只是借用了AspectJ中的注解,并且成为其流行使用的方式。

3、实验操作

实验一 初步实现
实验二 各个通知获取细节信息
实验三 重用切入点表达式
实验四 切入点表达式语法
实验五 环绕通知
实验六 切面的优先级
实验七 没有接口的情况

4、小结

05.基于注解的AOP - 图2

上一节 回目录 下一节