Java spring框架-AOP(底层原理+入门)II

spring

为什么要学习Spring框架

  1. 方便解耦,简化开发
    通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。
    有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
  2. AOP编程的支持
    通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
  3. 声明式事务的支持
    在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。

AOP的基本概念

  • Aspect(切面):通常是一个类,里面可以定义切入点(通常是一个表达式)和通知
  • JointPoint(连接点):程序执行过程中明确的点,一般是方法
  • Advice(通知) 就是对方法进行增强,分为前置通知,后置通知,最终通知,异常通知,环绕通知
  • Pointcut(切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式
  • AOP代理:AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以使JDK动态代理,也可以使用CGLIB代理,前者基于接口,后者基于子类

通知方法

  1. 前置通知:在我们执行目标方法之前运行(@Before)
  2. 后置通知:在我们目标方法运行结束之后 ,不管有没有异常(@After)
  3. 返回通知:在我们的目标方法正常返回值后运行(@AfterReturning)
  4. 异常通知:在我们的目标方法出现异常后运行(@AfterThrowing)
  5. 环绕通知:动态代理, 需要手动执行joinPoint.procced()(其实就是执行我们的目标方法执行之前相当于前置通知, 执行之后就相当于我们后置通知(@Around)

底层是代理模式(动态代理)

  • AOP是Spring框架面向切面的编程思想,AOP采用一种称为“横切”的技术,将涉及多业务流程的通用功能抽取并单独封装,形成独立的切面,在合适的时机将这些切面横向切入到业务流程指定的位置中

各通知在程序中的执行顺序

  1. 没有异常的情况
    前置通知-后置(最终)通知-返回后通知
  2. 发生异常的情况
    前置通知-后置(最终)通知-异常通知

execution表达式规则

 - @pointcut(“execution (void aop.Student.*(..))”)

使用spring AOP的流程

  1. 创建切面类,使用@Aspect标注此类是一个切面,@Component把此类交给spring进行管理
  2. 此类中定义切入点(可以使用@PointCut注解定义,也可以在通知使用pointCut属性定义),编写切入点表达式,切入点表达式标注出哪些方法需要被切入
  3. 在切面类中定义通知,通知为如何对方法进行增强
  4. 被增强对象也需要被spring进行管理

@befor

  • 标注此方法是前置通知,在切入点执行之前执行,可以在前置通知方法中使用JoinPoint类型作为形参,然后从此形参中获取切入点的各种信息

@AfterReturning

  • 表示此方法是返回后通知,在切入点成功返回返回值之后执行,可以使用returning属性标注出形参中接收切入点返回值的参数

@AfterThrowing

  • 表示此方式是异常通知,在切入点发生异常时执行,可以使用throwing属性标注出形参中接收切入点发生异常的参数

@After

  • 标注此方式是后置通知也叫最终通知,在切入点执行完之后执行,即使发生异常也会执行

@Aroud

  • 标注此方法为环绕通知,在环绕通知中可以使用形参为ProceedingJoinPoint类型,在方法中可以使用ProceedingJoinPoint执行被增强方法,以及获取被增强方法的各种参数

本章节讲解了spring的AOP,通过Spring提供的AOP功能,方便进行面向切面的编程

希望对你有帮助

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值