文章参考:https://blog.csdn.net/yuexianchang/article/details/77018603
1、什么是AOP
Aspect-Oriented Programing,为分散对象引入公共行为。将应用程序的商业逻辑和为其提供支持的通用服务进行分离
2、应用场景
事务
权限
日志
缓存
3、基本概念
1)、切面
2)、通知:before after throwing returning
3)、切点:利用切点表达式定义的方法的地方(方法)
4)、连接点:可能是修改程序的地方,发生异常的地方(方法中)
5)、切片:通知+切点
6)、织入:
7)、切入:
4、AOP原理
以@EnableAspectJAutoProxy为例:
重要的组件:@EnableAspectJAutoProxy功能是开启AOP功能,会给容器中注册后置处理器:AnnotationAwareAspectJAutoProxyCreator
在容器的创建流程过程中,首先会注册后置处理器,创建AnnotationAwareAspectJAutoProxyCreator对象。
其次,在初始化剩下单实例bean的过程中,会经历以下几步:
1)、创建业务逻辑组件和切面组件
2)、AnnotationAwareAspectJAutoProxyCreator会拦截创建组件的过程
3)、在组件完成的时候,判断组件是否需要增强
4)、若需要增强,则将通知方法包装成增强器,创建业务组件的代理对象
执行目标方法的过程中:
intercept()方法进行拦截,得到目标方法的拦截器链(增强方法),利用拦截器链式机制,依次进入执行增强方法。
正常执行:前置通知-->后置通知-->返回通知
异常情况:前置通知-->后置通知-->异常通知
网友评论