• spring-第十六篇之AOP面向切面编程之Spring AOP


    1、上一篇介绍了AspectJ在AOP的简单应用,让我们了解到它的作用就是:开发者无需修改源代码,但又可以为这些组件的方法添加新的功能

         AOP的实现可分为两类(根据AOP修改源码的时机划分)

            1>静态AOP实现:AOP框架在编译阶段对程序进行修改,即实现目标类的增强,生成静态的AOP代理类(生成的.class文件已经被修改,需要特定的编译器)。以AspectJ为例,所以AspectJ通常也被称作编译时增强的AOP框架。静态代理因经过编译后,所以性能上略有优势,但需要特殊的编译器。

            2>动态AOP实现:AOP框架在运行阶段动态生成AOP代理(在内存中)以实现对目标类的增强。典型的有JDK动态生成代理类、cglib动态生成代理类。

    2、spring AOP

         spring AOP是动态代理的代表,生成的代理类要么与目标类实现相同的接口,要么是目标类的子类,前者使用的是JDK代理的代理策略,后者使用的是cglib代理的处理策略。spring中的AOP代理由spring的IoC容器负责生成、管理,其依赖关系也由IoC容器负责管理。spring默认使用java动态代理来创建AOP代理。spring也可以使用cglib代理,在需要代理类而不是代理接口的时候,spring会自动切换为使用cglib代理。

    3、面向切面编程中的一些术语:

         切面(Aspect):或者称为切面类,切面用于组织多个Advice(增强处理),Advice放在切面中定义。如aspectjTest项目中的TxAspect.java。

         连接点(JoinPoint):程序执行过程中明确的程序执行点,如方法的调用,或者异常抛出点。spring AOP中,连接点总是方法的调用,即围绕着方法调用点。如aspectjTest项目中的连接点表达式。例如aspectjTest项目中如下代码:

             pointcut xxxPointcut():execution(* com.lfy.bean.*.*(..));

         增强处理(Advice):AOP框架在特定的切入点执行的增强处理。如aspectjTest项目“模拟进行权限检查”的处理代码。处理类型有before、around、after等类型。

         切入点(Pointcut):可以插入增强处理(Advice)的连接点。换言之,当某个连接点满足指定的执行点条件要求时,该连接点将被插入增强处理,该连接点也就变成了切入点。每个方法被调用都只是连接点,但该方法属于某个连接点增强处理配置的匹配项,则该方法将被增强处理,该连接点也就变成了切入点,增强了也就是切入了。

         如何使用表达式来定义切入点是AOP的核心,spring默认使用AspectJ的切入点语法。

         引入:将方法或字段增强到被处理的类中。spring允许将新的接口引入到任何被处理的对象中。例如,可以将一个新接口引入到任何需要被增强的对象中。

         目标对象:需要被AOP框架增强的对象。如果AOP框架采用的是动态AOP实现,那么该对象也称作被代理的对象。

          AOP代理:AOP框架(静态/动态)增强后的对象。spring中的AOP代理可以是JDK动态代理,也可以是cglib动态代理,前者为实现接口的目标对象的代理,后者为不实现接口的目标对象的代理。

          织入(Weaving):将增强处理添加到目标对象中,并创建一个被增强的对象(AOP代理)的过程。织入有两种实现方式--编译时增强(如AspectJ)和运行时增强(如spring AOP)。

    4、spring对AOP的支持

         spring目前仅支持将方法调用作为连接点(joinpoint),如果需要对成员变量的访问和更新也作为增强处理的连接点,则可以考虑使用AspectJ。

         一般开发人员进行AOP开发的步骤有如下3个部分:

              1>定义普通业务组件。

              2>定义切入点,一个切入点可能横切多个业务组件。

              3>定义增强处理,增强处理就是AOP框架为普通业务组件织入(Weaving)的处理业务。

         完成切入点的定义以及增强处理的定义,也就完成了AOP的编程,AOP框架将会自动的根据我们的切入点以及增强处理生成AOP代理。

         目前高于spring-1.x版本的spring提供2种方式定义切入点和增强处理:

               1>基于注解的“零配置”方式:使用@Aspect、@Pointcut等注解来标注切入点和增强处理。

               2>基于XML配置文件的管理方式:使用spring配置文件来定义切入点和增强处理。

        

  • 相关阅读:
    蓝绿发布、灰度发布和滚动发布
    linux redis 设置密码:
    redis配置文件讲解
    17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
    CentOS 7下安装Redis
    压力测试工具介绍
    【k8s部署kong一】kong k8s 安装 以及可视化管理界面
    Jmeter连接ORACLE数据库
    Jenkins安装插件提示实例似乎已离线问题解决办法
    Fiddler增加显示请求响应时间列
  • 原文地址:https://www.cnblogs.com/ZeroMZ/p/11311950.html
Copyright © 2020-2023  润新知