再学Spring Aop 原理

再学AOP

概念:

切面(aspect):一个关注点的模块化,这个关注点可能会横切多个对象。

连接点:Joinpoint:在程序执行过程中某个特定的点,一个连接点总是代表一个方法的执行。通过声明使(advice)通知的主体部分获得连接

点的信息。

通知(advice)在某个特定的连接点上执行的动作。许多aop框架包括spring都是以拦截器做通知的模型的,并维护一个以连接点为中心的拦截

器链。

切入点(Pointcut):匹配连接点的断言。

引入(Introduction):声明额外的方法或者麽各类型的字段,spring允许引入新的接口到任何被代理的对象。通过使用一个引入来使bean实

现IsModify接口,以简便缓存机制。

目标对象(Target Object):被一个或者多个切面所通知的对象

Aop代理(AOPProxy):Aop框架创建的对象,用来实现切面契约(aspect contract)包括通知方法执行等功能。spring中是JDK动态代理。或

者是CGLIB代理spring2.0最新引入的基于模式(schema-based)风格和AspectJ注解风格的切面声明,对与使用这些风格的用户来说,代理的创

建使的

织入(Weaving):把切面连接到其他的应用程序类型或者对象上,并创建一个通知的对象,

前置通知:在连接点之前执行的通知,但这个通知不能阻止连接点前的执行

返回后通知:在连接点正常完成后执行的通知

抛出异常后的通知:在方法抛出异常退出时执行的通知。

后通知:当某连接退出的时候执行的通知。

环绕通知:包围一个连接点的通知。

注意:尽量使用最简单的通知类型来实现需要的功能,用合适的通知类型会使编程变得简单,并且能够避免很多潜在的错误。

切入点和连接点匹配的概念是AOP的关键,这使得AOP不同于其他仅仅提

供拦截功能的旧技术。

AOP的功能和目标

上面简单的说了一些Aop的概念,进来有看了一下,感觉应该继续写下去,继续写一下它的功能和目标吧:

Spring AOP用纯Java实现。它不需要专门的编译过程。Spring AOP不需要控制类装载器层次,因此它适用于J2EE web容器或应用服务器,

Spring目前仅支持使用方法调用作为连接点(join point)虽可以加入对成员变量拦截器支持,但Spring并没有实现成员变量拦截器。Spring

并不是要尝试提供最完整的AOP实现(尽管Spring AOP有这个能力), 相反的,它其实侧重于提供一种AOP实现和Spring IoC容器的整合,用于

帮助解决在企业级开发中的常见问题。因此,它通常都和IoC容器一起使用。与其他AOP实现相比这是一个显著的区别。有些事使用Spring AOP

是无法轻松或者高效的完成的,比如说通知一个细粒度的对象。事实证明只要适合AOP来解决的,Spring AOP都没有问题,Spring AOP提供了一

个非常好的解决方案。而且spring从不去竞争哪个框架,而是去包容她,互补她。呵呵是不是一个最完美的情人….不爱她你还爱谁?

下一次我准备再看看AOP的代理机制吧

    原文作者:AOP
    原文地址: https://blog.csdn.net/handsome224521/article/details/83232767
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞