本文将使用 Spring AOP 提供一个关于统一异常处理的 AOP 技术应用示例。
(可直接跳到 2.2 查看代码示例:Maven依赖 + 切面类 + Bean配置)
1. AOP简述
AOP 全称为“Aspect Oriented Programming”,中文译名为“面向切面编程”。乍一看非常令人费解。但是你真正理解这项技术(或者说这个思想)要做什么后,你又会觉得“切面”(Aspect)这个词还真有些贴切。“切面”指的是这项技术(AOP)的控制代码并不是直接与业务代码结合在一起;而是分开编写,再由AOP技术根据控制代码中(对目标业务代码)的描述将两者结合在一起。如果我们把“控制代码与业务代码直接编写在一起”称为“正面操作”,那么AOP技术的方式可以称为“侧面操作”或“切面操作”,也就是“面向切面编程”。
AOP 可以被看作是 OOP 的一个补充。面向对象编程的模式对于跨越不同对象或类的逻辑处理能力有限。AOP的动态代理机制可以大幅提高代码的抽象程度和复用度。
AOP结合控制代码与业务代码的模式有“编译时结合”与“运行时结合”。
本示例中所使用的Spring AOP技术属于运行时结合模式。它基于动态代理(用到了cglib 和 JDK Proxy),不需要特殊的编译器来“织入”“切面”,但只支持方法拦截。
如果需要更强大和细粒度的控制(如,对构造器或属性进行拦截),则需要采用更强大的AspectJ技术。