AOP常用的增强方式

1、Before 前置增强:如果需要在执行方法addCustomer之前,我们进行一些其它的业务操作,比如校验参数是否为空,这时候就可以使用前置增强Before来实现了。

2、After 后置增强:程序在运行时,先调用了前置增强,然后执行业务方法,后面再执行了后置增强;而此时,一旦在执行业务方法的时候抛出异常了,后置增强还是会被执行的;比如在业务方法中添加一个异常,然后运行程序。

3、Around 环绕增强:环绕增强是在调用业务方法之前和调用业务方法之后都可以执行响应的增强语法,也就是说:一个前置增强和一个后置增强相当于是组成了一个环绕增强;不同的是,在前置增强和后置增强中,在AOP中前置增强和后置增强只能拿到JoinPoint类,而在环绕增强中,可以拿到ProceedingJoinPoint类。

4、AfterReturning 最终增强:这个和后置增强有一点类似,都是在业务方法执行后执行。

5、AfterThrowing 异常增强:在业务方法调用是程序出现异常并且异常在没有被捕获的前提下所触发的,我们可以使用最终增强来记录程序的错误日志,以便于我们进行排错等。异常增强被触发,可以获取到当前请求的参数信息、时间信息等,记录到数据库或者是ELK等,以便于排错使用,并且这些逻辑和业务代码是分开的互不影响,很大程度上的解除代码耦合

同时,当业务方法中没有异常信息时,则不会触发异常增强;从这里可以看出在同一个AOP中的执行顺序 Around --> Before --> Around --> After --> AfterReturning --> AfterThrowing

6、DeclareParents 引入增强:可以实现 一个Java类,没有实现A接口,在不修改Java类的情况下,使其具备A接口的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring AOP常用方法有以下几种: 1. 使用注解方式实现AOP:通过在目标方法上添加注解,然后在配置文件中配置切面和通知,实现对目标方法的增强。 ```java @Aspect @Component public class MyAspect { @Before("execution(* com.example.service.UserService.addUser(..))") public void beforeAddUser(JoinPoint joinPoint) { // 在目标方法执行之前执行的逻辑 System.out.println("Before adding user..."); } } ``` 2. 使用XML配置方式实现AOP:通过在配置文件中配置切面和通知,实现对目标方法的增强。 ```xml <bean id="myAspect" class="com.example.aspect.MyAspect" /> <aop:config> <aop:aspect ref="myAspect"> <aop:before method="beforeAddUser" pointcut="execution(* com.example.service.UserService.addUser(..))" /> </aop:aspect> </aop:config> ``` 3. 使用@Around注解实现环绕通知:通过在切面方法上添加@Around注解,可以在目标方法执行前后执行自定义逻辑。 ```java @Aspect @Component public class MyAspect { @Around("execution(* com.example.service.UserService.addUser(..))") public Object aroundAddUser(ProceedingJoinPoint joinPoint) throws Throwable { // 在目标方法执行之前执行的逻辑 System.out.println("Before adding user..."); // 执行目标方法 Object result = joinPoint.proceed(); // 在目标方法执行之后执行的逻辑 System.out.println("After adding user..."); return result; } } ``` 4. 使用@AfterReturning注解实现后置通知:通过在切面方法上添加@AfterReturning注解,可以在目标方法执行后执行自定义逻辑。 ```java @Aspect @Component public class MyAspect { @AfterReturning(pointcut = "execution(* com.example.service.UserService.addUser(..))", returning = "result") public void afterReturningAddUser(JoinPoint joinPoint, Object result) { // 在目标方法执行后执行的逻辑 System.out.println("After adding user..."); } } ``` 5. 使用@AfterThrowing注解实现异常通知:通过在切面方法上添加@AfterThrowing注解,可以在目标方法抛出异常时执行自定义逻辑。 ```java @Aspect @Component public class MyAspect { @AfterThrowing(pointcut = "execution(* com.example.service.UserService.addUser(..))", throwing = "ex") public void afterThrowingAddUser(JoinPoint joinPoint, Exception ex) { // 在目标方法抛出异常时执行的逻辑 System.out.println("Exception occurred while adding user: " + ex.getMessage()); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值