由于,使用注解配置AOP的bug
在使用注解配置AOP时,会出现一个bug. 四个通知的调用顺序依次是:前置通知,最终通知,后置通知. 这会导致一些资源在执行最终通知时提前被释放掉了,而执行后置通知时就会出错.

所以注解的方式改用,注解环绕通知。能更为精确。
基于这层代码进行修改:https://blog.csdn.net/qq847196660/article/details/96442929
1.修改bean.xml 配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd"><!--配置spring 创建容器时要扫描的包-->
<context:component-scan base-package="wuwei" ></context:component-scan><!--配置spring 开启注解AOP的支持-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy></beans>

2.重写通知类:Logger

//记录日志的工具类(也叫通知类),它里面提供了公共的代码
@Component("logger") //通知类的注解名称
@Aspect //表示当前类是一个切面类
public class Logger {//通用切入点表达式方法的注解@Pointcut("execution(* wuwei.service.impl.*.*(..))")private void pt1(){ }
//    环绕通知允许我们更自由地控制增强代码执行的时机
//
//    Spring框架为我们提供一个接口ProceedingJoinPoint,**可以理解为控制器**
//    它的实例对象可以作为环绕通知方法的参数,通过参数控制被增强方法的执行时机.
//
//    ProceedingJoinPoint对象的getArgs()方法返回被拦截的参数
//    ProceedingJoinPoint对象的proceed()方法执行被拦截的方法// 环绕通知方法,返回Object类型@Around("pt1()")public Object printLogAround(ProceedingJoinPoint pjp) {Object rtValue = null;try {Object[] args = pjp.getArgs();beforePrintlog();        // 执行前置通知rtValue = pjp.proceed(args);// 执行被拦截方法afterReturningPrintlog();     // 执行后置通知}catch(Throwable e) {afterThrowingPrintlog();   // 执行异常通知}finally {afterPrintlog();         // 执行最终通知}return rtValue;}//@Before("pt1()")//引用已提取出的通用表达式,也就是把这个通知指向某包下某实现类中的某实现方法public void beforePrintlog(){//用于打印日志:计划让其在切入点方法执行前执行,也就是前置通知//切入点方法就是业务层的方法System.out.println("logger类中 前置通知 方法开始记录日志了。。。");}// @AfterReturning("pt1()")public void afterReturningPrintlog(){//后置通知System.out.println("logger类中 后置通知 方法开始记录日志了。。。");}// @AfterThrowing("pt1()")public void afterThrowingPrintlog(){//异常通知System.out.println("logger类中 异常通知 方法开始记录日志了。。。");}// @After("pt1()")public void afterPrintlog(){//最终通知System.out.println("logger类中 最终通知 方法开始记录日志了。。。");}}

3.其他的代码参照上面的xml 配置方式写就行

spring基于注解的AOP配置 中的环绕通知 步骤写法相关推荐

  1. Spring基于注解的AOP配置

    pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...

  2. 基于注解的 AOP 配置

    基于注解的 AOP 配置 bean.xml <?xml version="1.0" encoding="UTF-8"?> <beans xml ...

  3. spring 基于注解的控制器配置

    http://ttaale.iteye.com/blog/787586 spring 基于注解的控制器配置 博客分类: spring SpringBeanServletMVCWeb 13.12. 基于 ...

  4. 5、基于注解的AOP配置

    一.开启注解支持 1.概述 1.Spring AOP如同IoC一样支持基于XML和基于注解两种配置方式,基于注解所需的依赖和基于XML所需的依赖一致,其中spring-context包含了Spring ...

  5. Spring —— 基于注解的Aop在同一类下产生嵌套时切面不生效问题产生原因及解决

    一.背景介绍 由于程序中大量方法需要监控执行耗时,因此写了基于注解的Aop类来减少重复代码,主要作用是通过环绕通知在方法执行前后进行耗时计算,最后输出到日志/监控. 相关代码如下: // 注解 @Re ...

  6. Spring 基于注解(annotation)的配置之@Required注解

    从 Spring 2.5 开始就可以使用注解来配置依赖注入.注解连线在默认情况下在 Spring 容器中不打开.因此,在可以使用基于注解的连线之前,我们将需要在我们的 Spring 配置文件中启用它: ...

  7. Spring 基于注解(annotation)的配置之@Autowired注解

    Setter 方法中的 @Autowired 当 Spring遇到一个在 setter 方法中使用的 @Autowired 注解,它会试图执行 byType 自动连接.换言之,加了@Autowired ...

  8. Java spring基于XML的aop配置实现

    1.依赖包 2.文件结构 3.接口类ISomeService package com.buckwheats.test;public interface ISomeService {public voi ...

  9. spring基于aspectj的AOP配置 aop:aspectj-autoproxy proxy-target-class=true

    精通Spring4.x--企业应用开发实战 8.5.1@AfterReturning("@annotation()")切点函数详解 代码实现的目标是为NaugthyWaiter类的 ...

  10. Spring 基于注解(annotation)的配置之@Qualifier注解

    使用@Qualifier可以分别为同样类型的Bean分别注入不同的依赖值.看个例子: Student.java: package com.sap;public class Student {priva ...

最新文章

  1. atoi() //把字符串转换成整型数
  2. SpringBoot使用mybatis
  3. windows 下win+r无效
  4. plsql执行command命令控制台出现乱码_展现“管理员”的神级能力,有趣又实用的我的世界基础命令...
  5. arm linux 开机电路_ARM Linux启动过程分析
  6. 看懂这5幅图,研发效能分析和改进就容易了
  7. 城市运行一网统管_【宣传活动】持续开展城市运行“一网统管”建设宣传活动...
  8. 各种Java加密算法
  9. 图书馆的uml概念类图怎么画_设计模式:UML?设计原则?
  10. java易错_java易错基础知识点
  11. Java基础知识强化51:经典排序之桶排序(BucketSort)
  12. 钱盾率先提出的“全流程屏障”究竟是怎样的一种能力?
  13. object-c category
  14. 关于杭州电子科技大学毕业论文格式设置
  15. LabVIEW如何将脚本插入Quick Drop
  16. 固态加装机械计算机不显示,笔记本电脑装了固态硬盘,机械硬盘却无法识别
  17. python如何设置窗口为活动窗口
  18. 短信格式(sms)以及编码总结
  19. 用 Python 自动玩王者荣耀,有点意思!
  20. Python第一天:你必须要知道的Python擅长领域以及各种重点学习框架(包含Python在世界上的应用)

热门文章

  1. 又一股份制银行,菊风「视频能力平台」承包了
  2. NGS 分析流程 (一)
  3. 给重回正路的大二学生:戒急戒躁中前行
  4. Android项目旋转屏幕数据丢失的原因及解决
  5. 一张表看懂英式音标和美式音标的差异
  6. java游戏 麦克斯 狗,我的主角麦克斯----记南极大冒险中的狗狗们
  7. 计算机保研面试英文,计算机保研面试英文自我介绍范文
  8. word添加参考文献和标注的方法
  9. 通过Grafana进行监控报警
  10. 微信开发遇到的那些坑