spring基于注解的AOP配置 中的环绕通知 步骤写法
由于,使用注解配置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配置 中的环绕通知 步骤写法相关推荐
- Spring基于注解的AOP配置
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- 基于注解的 AOP 配置
基于注解的 AOP 配置 bean.xml <?xml version="1.0" encoding="UTF-8"?> <beans xml ...
- spring 基于注解的控制器配置
http://ttaale.iteye.com/blog/787586 spring 基于注解的控制器配置 博客分类: spring SpringBeanServletMVCWeb 13.12. 基于 ...
- 5、基于注解的AOP配置
一.开启注解支持 1.概述 1.Spring AOP如同IoC一样支持基于XML和基于注解两种配置方式,基于注解所需的依赖和基于XML所需的依赖一致,其中spring-context包含了Spring ...
- Spring —— 基于注解的Aop在同一类下产生嵌套时切面不生效问题产生原因及解决
一.背景介绍 由于程序中大量方法需要监控执行耗时,因此写了基于注解的Aop类来减少重复代码,主要作用是通过环绕通知在方法执行前后进行耗时计算,最后输出到日志/监控. 相关代码如下: // 注解 @Re ...
- Spring 基于注解(annotation)的配置之@Required注解
从 Spring 2.5 开始就可以使用注解来配置依赖注入.注解连线在默认情况下在 Spring 容器中不打开.因此,在可以使用基于注解的连线之前,我们将需要在我们的 Spring 配置文件中启用它: ...
- Spring 基于注解(annotation)的配置之@Autowired注解
Setter 方法中的 @Autowired 当 Spring遇到一个在 setter 方法中使用的 @Autowired 注解,它会试图执行 byType 自动连接.换言之,加了@Autowired ...
- Java spring基于XML的aop配置实现
1.依赖包 2.文件结构 3.接口类ISomeService package com.buckwheats.test;public interface ISomeService {public voi ...
- spring基于aspectj的AOP配置 aop:aspectj-autoproxy proxy-target-class=true
精通Spring4.x--企业应用开发实战 8.5.1@AfterReturning("@annotation()")切点函数详解 代码实现的目标是为NaugthyWaiter类的 ...
- Spring 基于注解(annotation)的配置之@Qualifier注解
使用@Qualifier可以分别为同样类型的Bean分别注入不同的依赖值.看个例子: Student.java: package com.sap;public class Student {priva ...
最新文章
- atoi() //把字符串转换成整型数
- SpringBoot使用mybatis
- windows 下win+r无效
- plsql执行command命令控制台出现乱码_展现“管理员”的神级能力,有趣又实用的我的世界基础命令...
- arm linux 开机电路_ARM Linux启动过程分析
- 看懂这5幅图,研发效能分析和改进就容易了
- 城市运行一网统管_【宣传活动】持续开展城市运行“一网统管”建设宣传活动...
- 各种Java加密算法
- 图书馆的uml概念类图怎么画_设计模式:UML?设计原则?
- java易错_java易错基础知识点
- Java基础知识强化51:经典排序之桶排序(BucketSort)
- 钱盾率先提出的“全流程屏障”究竟是怎样的一种能力?
- object-c category
- 关于杭州电子科技大学毕业论文格式设置
- LabVIEW如何将脚本插入Quick Drop
- 固态加装机械计算机不显示,笔记本电脑装了固态硬盘,机械硬盘却无法识别
- python如何设置窗口为活动窗口
- 短信格式(sms)以及编码总结
- 用 Python 自动玩王者荣耀,有点意思!
- Python第一天:你必须要知道的Python擅长领域以及各种重点学习框架(包含Python在世界上的应用)