- 概论
AOP(Aspect-Oriented Programming)面向切面编程。
OOP(Object-Oriented Programmin) 面向对象编程。
以AOP设计初衷来看,就是将系统分为 方面(Aspect)和关注点(Concern),这样让我们更多的精力放在业务逻辑核心点,而一些修饰的东西交给AOP实现。 - 实现原理
在编译期修改源代码,运行期字节码加载前修改字节码或者字节码加载后动态创建代理类的字节码,这是AOP的实现方法。AOP具体实现分三步首先是生成代理,然后拦截器作用最后是编织具体的实现。(需要了解一下JDK反射机制,代理模式,静态代理,动态代理,CGLIB),以下是AOP体系图
共分为三个层次:1.AOP的配置,以及对配置的解析,检查;2.主要包括配置和编织逻辑,主要是高级API封装;3.编织实现具体模块主要包括反射、元数据处理、程序处理、类加载、拦截器 - 使用
AOP在权限、日志、缓存、错误处理、懒加载、调试、跟踪优化和校准、性能优化、持久化、资源池、同步等方面都有用处。
AOP相关术语如图
目标对象(Target):包含连接点的对象,被用来增强或者代理的对象。
代理(Proxy):AOP框架创建的对象。
连接点(JoinPoint):程序执行中明确的点,如方法的调用异常的抛出。
切点(PointCut):AOP框架引发的地方。
增强(Advice):在特定的连接点执行的动作,比如Before throws
切面(Advisor):一个关注点的模块化,一般使用Advisor或者拦截器实现。
织入(Weaving):组装具体的实现,
引入(Introduction):添加方法或者字段到增强化类。
接口(IsModified):用于简化缓存。
Spring aop 具体使用:
增强(Advice)描述何时调用,分为 Before,After,Around,Throws,Introduction
切点 (PointCut)描述何处调用
AOP有两种配置方式 XML配置方式 和自动注解配置方式
AOP配置元素 | 描述 |
---|---|
<aop:advisor> | 定义AOP通知器 |
<aop:after> | 定义AOP后置通知(不管该方法是否执行成功) |
<aop:after-returning> | 在方法成功执行后调用通知 |
<aop:after-throwing> | 在方法抛出异常后调用通知 |
<aop:around> | 定义AOP环绕通知 |
<aop:aspect> | 定义切面 |
<aop:aspect-autoproxy> | 定义@AspectJ 注解驱动的切面 |
<aop:before> | 定义AOP前置通知 |
<aop:config> | 顶层的AOP配置元素 |
<aop:declare-parent> | 为被通知的对象引入额外的接口,并透明的实现 |
<aop:pointcut> | 定义切点 |
自动注解
<aop:aspectj-autoproxy />
(小结:对于AOP在项目中目前我使用的还是很少,所以有些使用场景理解还不够深刻,后面会给出一些场景具体的使用简介,学习之路漫漫,只能慢慢来。)