• Spring AOP浅谈


    什么是AOP

    AOP是Aspect-Oriented Programming的缩写,是一种面向切面的编程方法。
    在AOP中,一个切面是一组可以独立于其他代码执行的功能,如日志记录、安全性检查、事务处理等。这些功能通常被称为"通知",并且在AOP中被称为"切入点"。
    AOP通过将这些切面"织入"到应用程序的正常流程中,使得可以将这些功能模块化,并在不修改主要业务逻辑的情况下将其应用到应用程序中。
    这种方法可以让开发人员更专注于业务逻辑,而不必担心其他功能的实现细节。同时,AOP还可以帮助减少代码冗余,提高代码的可维护性和可扩展性。

    Spring AOP的实现原理

    AOP技术利用一种称为“横切”的技术,解剖封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,这样就能减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。

    Spring中AOP实现原理大致分为4个阶段:

    创建代理对象阶段

    在Spring中,创建Bean实例都是从getBean()方法开始的 ,在实例创建之后,Spring容器将根据AOP的配置去匹配目标类的类名,看目标类的类名是否满足切面规则。如果满足满足切面规则,就会调用ProxyFactory创建代理Bean并缓存到IoC容器中。根据目标对象的自动选择不同的代理策略。如果目标类实现了接口,Spring会默认选择JDK Proxy,如果目标类没有实现接口,Spring会默认选择Cglib Proxy,当然,我们也可以通过配置强制使用Cglib Proxy。

    拦截目标对象阶段

    当用户调用目标对象的某个方法时,将会被一个叫做AopProxy的对象拦截,Spring将所有的调用策略封装到了这个对象中,它默认实现了InvocationHandler接口,也就是调用代理对象的外层拦截器。在这个接口的invoke()方法中,会触发MethodInvocation的proceed()方法。在这个方法中会按顺序执行符合所有AOP拦截规则的拦截器链。 

    调用代理对象阶段

    Spring AOP拦截器链中的每个元素被命名为MethodInterceptor,其实就是切面配置中的Advice通知。这个回调通知可以简单地理解为是新生成的代理Bean中的方法。也就是我们常说的被织入的代码片段,这些被织入的代码片段会在这个阶段执行。

    调用目标对象阶段

    MethodInterceptor接口也有一个invoke()方法,在MethodInterceptor的invoke()方法中会触发对目标对象方法的调用,也就是反射调用目标对象的方法。

  • 相关阅读:
    事务的隔离级别与MVCC
    阿里云3M固定带宽服务器速度快吗?是否够用?
    Rust之包,箱和模块管理(二):定义控制范围和隐私的模块
    Ribbon负载均衡
    python
    idea配置文件属性提示消息解决方案
    神经网络算法基本介绍,简单神经网络算法原理
    基于MIMO+16QAM系统的VBLAST译码算法matlab仿真
    单指标时间序列异常检测——基于重构概率的变分自编码(VAE)代码实现(详细解释)
    计算机网络-网络层:IP协议
  • 原文地址:https://blog.csdn.net/yusheng_xyb/article/details/138671366