- 什么是 AOP 及 AOP 的实现方式
- AOP 的基本概念
- Spring 的 AOP
- Schema-based AOP
- Spring AOP API
- AspectJ
- AOP : Aspect Oriented Programming 的缩写,意为:面向切面编程,通过预编译的方式和运行期动态代理实现程序功能的统一维护的一种技术
- 主要功能:日志记录,性能统计,安全控制,事务处理,异常处理等等。
面向切面: AOP 的概念 - 预编译
- AspectJ
- 运行期动态代理(JDK 动态代理、CGLib 动态代理)
- SpringAOP、JbossAOP
AOP 相关术语
名称 | 说明 |
---|---|
切面(Aspect) | 一个关注点的模块化,这个关注点可能会横切多个对象 |
连接点(Joinpoint) | 程序执行过程中的某个特定的点 |
通知(Advice) | 在切面的某个特定的点上执行的动作 |
切入点(Pointcut) | 匹配连接点的断言,在 AOP 中通知和一个切入点表达式关联 |
引入(Introduction) | 在不修改类代码的前提下,为类添加新的方法和属性 |
目标对象(Target Object) | 被一个或者多个切面所通知的对象 |
AOP 代理(AOP Proxy) | AOP 框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能) |
织入(Weaving) | 把切面连接到其他的应用程序类型或者对象上,并创建一个被通知的对象,分为:编译时织入、类加载织入、执行时织入 |
Advice 的类型
名称 | 说明 |
---|---|
前置通知(Before advice) | 在某连接点之前执行的通知,不足之处连接点执行 |
返回后通知(After returning advice) | 连接点正常执行完后执行的通知 |
抛出异常后通知(After throwing advice) | 方法抛出异常后执行的通知 |
后通知(After(finally) adviece) | 当某连接点退出时执行的通知(包括异常) |
环绕通知(Around Advice) | 包围一个连接点(Join point) 的通知 |
用途
- 提供声明是的企业服务,EJB 的替代服务
- 允许用户定制自己的方面,完成 OOP 和 AOP 的互补使用
Spring 的 AOP 实现
- 纯 java 实现,不需控制类加载器层次
- 目前只支持方法执行连接点(通知 Spring Bean 的方法执行)
- 不是为了提供最完整的 AOP 的实现,侧重 AOP 和 Spring IoC 容器之间的整合
- Spring AOP 不与 AspectJ 竞争,不提供全面 AOP 解决方案,只关注 Spring 中 SOP 的实现。
- 有接口的 Spring AOP 默认使用 JavaSE 动态代理。无接口使用 CGLIB 代理