spring切面什么时候执行

worktile 其他 87

回复

共3条回复 我来回复
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    Spring切面(Aspect)是一种与特定业务逻辑无关的模块,用于将横切关注点(如日志记录、性能统计)与业务逻辑进行解耦。切面在Spring框架中的执行时机是通过AOP(Aspect-Oriented Programming)来管理的。AOP是一种编程范式,是一种在OOP(Object-Oriented Programming)基础上的扩展,通过在程序运行时动态地将切面织入到被切入对象中,从而实现切面的执行。

    在Spring中,切面的执行时机主要有以下几个点:

    1. Before(前置通知):在目标方法执行之前执行切面逻辑。可以用于检查参数、进行安全验证等操作。

    2. After returning(返回通知):在目标方法成功执行并返回结果后执行切面逻辑。可以对方法的返回值进行处理、记录日志等操作。

    3. After throwing(异常通知):在目标方法抛出异常后执行切面逻辑。可以用于处理异常、回滚事务等操作。

    4. After(后置通知):在目标方法执行后无论是否发生异常都执行切面逻辑。可以用于进行清理工作、释放资源等操作。

    5. Around(环绕通知):在目标方法执行前后执行切面逻辑。可以完全控制方法的执行过程,包括是否执行目标方法、在执行前后进行额外的逻辑处理等。

    切面的执行时机取决于切面的通知类型和切入点表达式的匹配情况。通知类型决定了切面逻辑的执行时机,而切入点表达式决定了切面逻辑应该在哪些目标方法上执行。通过配置切面的通知类型和切入点表达式,可以精确地控制切面的执行时机。

    总结起来,Spring切面的执行时机是在目标方法执行前后或发生异常时执行切面逻辑,通过配置切面的通知类型和切入点表达式来控制。切面的执行时机是动态的,可以根据实际需求进行配置。

    1年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    Spring切面是在特定的关注点上执行的,这些关注点可以是方法的执行、方法的调用、异常的抛出等。Spring框架使用面向切面编程(AOP)来实现切面。切面可以通过定义切点和通知来描述在何时和何处执行。下面是一些切面在Spring框架中执行的时机:

    1. 方法执行前后:切面可以在目标方法执行之前或之后执行。通常用于记录日志、处理缓存、监控等业务需求。

    2. 异常处理:切面可以捕获异常,并处理或停止它们的传播。这样可以集中处理应用程序中的异常情况。

    3. 方法调用:切面可以在某个方法被调用时执行。这可以用于权限控制、事务管理等功能。

    4. 对象的创建和销毁:切面可以在对象的创建和销毁时执行。这可以用于资源的初始化和释放等操作。

    5. 定时任务:切面可以在定时任务触发时执行。这可以用于执行定时任务的前置和后置处理。

    需要注意的是,切面的执行顺序可以通过设置优先级来控制。除了切面执行时机的选择,Spring框架还提供了不同类型的通知(Advice)来处理切面逻辑,例如前置通知、后置通知、环绕通知等。

    总结起来,Spring切面在特定的关注点上执行,例如方法执行、方法调用、异常处理等。切面的执行时机可以通过定义切点和通知来指定,并且可以通过设置优先级来控制执行顺序。切面是Spring框架中实现面向切面编程的重要组成部分。

    1年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    Spring框架中的切面(Aspect)是一种用于在应用程序中实现横切关注点的技术。切面可以截取到程序执行过程中的特定点,并在这些点上执行特定的操作。而切面的执行时间由AspectJ切点表达式(AspectJ pointcut expression)和Spring框架提供的AOP代理机制共同决定。

    下面是切面的执行时机以及相关的操作流程:

    1. 编译时期:AspectJ提供了一种编译时期的切面织入方式,就是在程序编译的时候将切面代码织入到目标程序中。这样就可以在编译后的程序中执行切面的操作。切面代码在编译后会以字节码的形式存在,所以在运行时切面的操作是直接执行的,并且不需要通过AOP代理来实现。

    2. 类加载时期:当目标类被加载进JVM时,Spring框架会根据切点表达式来判断是否需要为目标类创建代理对象。如果切点表达式匹配到了目标类的方法,则会为该方法创建代理对象来包装目标方法。这种方式是通过动态代理实现的,所以切面的操作会在目标方法执行之前或之后执行。

    3. 运行时期:当目标方法被调用时,如果该方法被AOP代理包装过,则代理对象会在目标方法执行之前或之后执行切面的操作。具体执行的切面操作由切面代码中定义的通知(Advice)决定。通知分为以下几种类型:

      • 前置通知(Before advice):在目标方法执行之前执行。例如,可以在方法执行前进行权限校验。

      • 后置通知(After advice):在目标方法执行之后执行。例如,可以在方法执行后进行记录日志。

      • 返回通知(After returning advice):在目标方法成功执行并返回结果后执行。例如,可以在方法成功执行后进行数据清理。

      • 异常通知(After throwing advice):在目标方法抛出异常时执行。例如,可以在方法抛出异常后进行异常处理。

      • 环绕通知(Around advice):在目标方法执行前后都执行,并且可以完全控制方法的执行过程。例如,可以在方法执行前后进行性能监控。

    通过配置不同类型的通知,我们可以在目标方法的不同执行点上执行切面的操作。

    总结起来,Spring切面的执行时机主要由AspectJ切点表达式和Spring框架提供的AOP代理机制共同决定。切点表达式用于匹配目标方法,如果匹配成功,则AOP代理会在方法执行之前或之后执行切面的操作。切面的操作可通过不同类型的通知来定义,在目标方法的不同执行点上执行。

    1年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部