AOP面向切面编程思想

  AOP(Aspect Oriented Programming)简介:AOP(面向切面编程)是一种编程范式,它通过在程序中定义特定的切入点(Join Point)和相应的通知(Advice),实现对程序行为的横向切割和重用。好比Java面向对象编程思想。

在AOP中,程序的核心业务逻辑被称为目标对象(Target Object),而围绕目标对象的横切关注点(Cross-cutting Concerns),例如日志记录、性能监测、事务管理等,被称为切面(Aspect)。切面定义了在哪些切入点上执行哪些通知。

AOP的关键概念包括:

  1. 切入点(Join Point):程序执行过程中能够插入切面的点,通常是方法的调用、方法的执行、异常的抛出等。

  2. 通知(Advice):切面在切入点上执行的动作,例如在方法调用前后执行、方法抛出异常时执行等。

  3. 切面(Aspect):横切关注点的模块化单元,它由切入点和通知组成。

  4. 织入(Weaving):将切面应用到目标对象中的过程,可以在编译时、加载时或运行时进行。

AOP的好处在于它能够将横切关注点与核心业务逻辑分离,提高了代码的模块化、可维护性和可重用性。通过AOP,我们可以将一些通用的功能从核心业务逻辑中抽离出来,避免了代码的重复,同时也使得关注点更加集中和清晰。

在Java开发中,常用的AOP框架包括Spring AOP、AspectJ等,它们提供了方便的注解或配置方式来定义切面和通知,并在运行时进行织入操作,从而实现AOP的功能。

本文将基于Spring进行AOP的讲解

首先要了解基本名词概念:

连接点:要执行功能增强器的类中所有的方法都叫做连接点

例如要对这个类 的某些功能做个增强,那么这个类中所有的方法都叫做连接点。

切入点:切入点就是你具体要对哪些方法进行功能增强。比如说我想对print1方法进行增强那么这个方法就是切入点。

通知:实现功能增强的代码称为通知。通知分为前置通知(Before Advice)在目标方法执行之前执行的通知。可以在通知方法中添加一些前置操作,例如参数验证、日志记录等。

后置通知(After Advice)在目标方法执行之后执行的通知。无论目标方法是否抛出异常,后置通知都会执行。常用于资源释放、日志记录等操作。

返回通知(After Returning Advice)在目标方法成功执行并返回结果后执行的通知。可以访问目标方法的返回值,并进行一些额外的处理,例如日志记录、结果转换等。

异常通知(After Throwing Advice):在目标方法抛出异常后执行的通知。可以捕获目标方法抛出的异常,并进行相应的处理,例如异常处理、错误日志记录等。

环绕通知(Around Advice):在目标方法执行前后环绕执行的通知。它可以完全控制目标方法的执行过程,可以在目标方法执行前后添加额外的逻辑,甚至可以决定是否执行目标方法。

其中环绕通知最为常用可以实现其它四个通知

 这个类中@Pointcut注解用于指定对位于某个包下面的某个方法进行功能的实现。void表示对应的返回值,后面参数表示为路径(切入点表达式)。可以使用通配符代替。对于本类中method方法就是对对应方法所做的功能实现,也就是通知,@Around表示是环绕通知。由众多的method方法组成的类成为切面。@Componen是让Spring把此类标记为组件,@Aspect用于在Java类中标识一个切面(Aspect)的定义。

环绕通知使用时尽量使用Object作为返回值

参数ProceedingJoinPoint用于原始方法的执行。比如这个method2()方法,我在调用前先输出了一些内容包括方法类型,方法名称等。然后调用proceed方法进行原始方法的调用,最后在输出了一些内容,并将返回值进行返回。这个返回值可以进行更改,原始方法得到的就是这个method2()方法的返回值。

当然方法的形参也可以进行获取并进行一定的修改再次传入

 这样原始方法参数原本是100,这样需修改后执行时参数就变为12,然后再执行程序。这个操作可以用来进行数据的纠正,比如密码系统,我们可以使用此方法进行密码的去空格操作等,再把密码作为参数传入在进行校验。注意的是使用的同时要在配置类上加上@EnableAspectJAutoProxy注解。因为AOP通过代理模式实现这个注解等于告诉Spring开启AspectJ(一个功能强大的面向切面编程(AOP)框架)的自动代理功能。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值