Spring Aop

1. Spring AOP

Aop是通过代理的方式实现的,默认的方式有JDK动态代理和CGLIB两种方式.

2. 大致流程

1. 预处理判断 -- 是否需要代理
2. 获取增强类,即获取通知(advice)
    2.1 获取所有的增强. 遍历beanFactory容器中所有的bean,找出被@aspectj注解的bean
    2.2 选择合适的增强. 根据pointCut表达是判断是否需要该增强
3. 将增强链和目标对象产生代理类

3. 关键类

1. JDKDynamicAopProxy 实现了InvocationHandler,作为aop的增强逻辑
2. ReflectiveMethodInvocation 封装拦截器链
3. AnnotationAwareAspectJAutoProxyCreator 是一个BeanPostProcessor类,在Bean初始化过程中生效.
生成代理对象
4. DefaultAopProxyFactory 判断是以jdk还是cglib实现动态代理

4. 异常问题处理

1. 内部调用失效,设置expose-proxy为false
2. proxy-target-class 默认的代理方式为jdk动态代理

你可能感兴趣的:(Spring Aop)