Spring AOP框架体系小结

版权声明:本文为博主原创文章,可任意转载,如不嫌麻烦请注明出处。 https://blog.csdn.net/qq_24693837/article/details/78872024

一、这里先列举一些AOP基本概念,后面提到再作相应解释

1)目标对象 target

2)代理对象 proxy

3)切点 pointcut

4)增强 advice

5)切面 advisor

6)织入器:将增强逻辑嵌入到目标对象的切点位置上从而生成代理对象的工具,相当于连接目标对象和代理对象的桥梁


二、说到框架体系,就要从底层慢慢往上做抽象,那就先从设计模式和实现机制讲起:

Spring AOP的设计模式是代理模式

1.静态代理:在编译时就给每个需要增强的目标对象编写出对应的代理对象,缺点是如果增强的逻辑都一样,那么每个代理对象之间就有很多重复性的代码。

2.动态代理:在系统运行时才给目标对象创建代理对象,克服了静态代理的缺点,增强的逻辑代码只需写一遍。


三、Spring AOP采用动态代理模式,实现机制有两种:

1)基于接口的JDK自带的动态代理组件,这里主要包括InvocationHandler和Proxy两个类

2)基于类的CGLib类库的动态字节码增强技术,通过创建目标类的子类,扩展生成代理对象,这里主要包括MethodInterceptor(net.sf.cglib.proxy.MethodInterceptor)和Enhancer两个类


四、Spring AOP织入器

Spring AOP中的最基本的织入器是ProxyFactory,其内部就是使用JDK或CGLib动态代理技术将增强织入到目标类中:Cglib2AopProxy和JdkDynamicAopProxy。


五、Spring AOP增强的五种类型:

1)前置增强:BeforeAdvice

2)后置增强:AfterReturningAdvice

3)环绕增强:MethodInterceptor(org.aopalliance.intercept.MethodInterceptor)

4)异常抛出增强:ThrowsAdvice

5)引介增强:IntroductionInterceptor,这个比较特殊,表示在目标类中添加一些新的方法和属性


六、切点 Pointcut

假设我们希望有选择地织入目标类的某些特定方法,就需要使用切点进行这些特定方法的定位。Spring AOP通过Pointcut这个接口描述切点,Pointcut由ClassFilter和MethodMatcher构成,通过ClassFilter定位到目标类,通过MethodMatcher定位到类的特定方法。


七、切面Advisor

切面Advisor由增强Advice和切点Pointcut构成,由于增强的不同又分为PointcutAdvisor和IntroductionAdvisor。前者最常见的实现是DefaultPointcutAdvisor,可由任意的Pointcut和Advice构成,唯一不支持的是引介增强,所以有了后者。前面了这个引介增强IntroductionInterceptor很特殊,这里展开讲讲:通过引介增强,可以为目标类添加一个接口的实现,即原来目标类未实现某个接口,通过引介增强可以为目标类创建实现某接口的代理。Spring定义了引介增强接口IntroductionInterceptor,但没有定义任何方法。Spring为该接口提供了DelegatingIntroductionInterceptor实现类,一般情况下,通过继承该类来定义自己的介增强类。

而引介切面最常见的实现是DefaultIntroductionAdvisor。


八、自动创建代理

Spring AOP建立在Spring IOC基础上,所以能够享受到很多Spring容器带来的便利功能,其中之一就是Spring提供自动代理机制,让容器自动生成代理,把开发人员从繁琐的配置工作解放出来。在内部,Spring使用BeanPostProcessor自动完成这项工作,其中最常见最基本的实现是DefaultAdvisorAutoProxyCreator。




猜你喜欢

转载自blog.csdn.net/qq_24693837/article/details/78872024