面向切面编程
为什么需要切面?
切面术语
通知(advice):切面需要完成的工作
- 通知的类型(什么时间完成工作)
- 前置通知(Before):在目标方法被调用之前调用通知功能;
- 后置通知(After):在目标方法完成之后调用通知;
- 返回通知(After-returning):在目标方法成功执行之后调用通知;
- 异常通知(After-throwing):在目标方法抛出异常后调用通知;
- 环绕通知(Around):在被通知的方法调用之前和调用之后执行。
- 通知的类型(什么时间完成工作)
切点(pointcut):
切点的定义会匹配通知所要织入的一个或多个连接点
连接点(join point):
连接点是在应用执行过程中能够插入切面的一个点,这个点可
以是调用方法时、抛出异常时。
切面(Aspect):
引入(Introduction):
织入(Weaving):
- 在对象哪个生命周期中织入
- 编译期:切面在目标类编译时被织入。这种方式需要特殊的编译器。AspectJ的织入编译器就是以这种方式织入切面的。
- 类加载期:切面在目标类加载到 JVM 时被织入。这种方式需要特殊的类加载器(ClassLoader),它可以在目标类被引入应用之前增强该目标类的字节码。AspectJ 5的加载时织入(load-time weaving,LTW)就支持以这种方式织入切面。
- 运行期:切面在应用运行的某个时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象动态地创建一个代理对象。Spring
AOP就是以这种方式织入切面的。
- 在对象哪个生命周期中织入