【什么是面向切面编程】
横切关注点可以被描述为影响应用多处的功能。
AOP术语
通知(Advice)
- 前置通知(Before):在目标方法被调用之前调用通知功能。
- 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么。
- 返回通知(After-returning):在目标方法成功执行之后调用通知。
- 异常通知(After-throwing):在目标方法抛出异常后调用通知。
- 环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
连接点(Join point)
应用执行过程中能够插入切面的一个点。
切点(Pointcut)
切点的定义会匹配通知所要织入的一个或多个连接点。
切面(Aspect)
切面是通知和切点的结合。
引入(Introduction)
允许向现有的类添加新方法或属性。
织入(Weaving)
织入是把切面应用到目标对象并创建新的代理对象的过程。在目标对象的生命周期里有多个点可以进行织入:
- 编译期:切面在目标类编译时被织入。
- 类加载期:切面在目标类加载到JVM是被织入。
- 运行期:切面在应用运行的某个时刻被织入。
spring对aop的支持
- 基于代理的经典spring aop。
- 纯POJO切面。
- @AspectJ注解驱动的切面。
- 注入式AspectJ切面(适用于spring各版本)。
spring通知是java编写的
spring在运行时通知对象
spring只支持方法级别的连接点
【通过切点来选择连接点】
通知和切点是切面的最基本元素。
编写切点
在切点中选择bean
【使用注解创建切面】
定义切面
创建环绕通知
处理通知中的参数
通过注解引入新功能
【在XML中声明切面】
声明前置和后置通知
声明环绕通知
为通知传递参数
通过切面引入新的功能
【注入AspectJ切面】