详述Spring AOP @Before,@After,@AfterReturning、@AfterThrowing和@Around

一、AOP的作用

当多个方法中出现重复的代码时,一般会将其提取为新的方法,然后通过调用这个新的方法以此简化代码
而spring aop就是专门做这样的工作的

二、怎么使用AOP

1、创建项目

我们可以创建一个AOP类,并添加@Aspect注解,在此之前需要引包aspectjweaver-1.8.10.jar;在app.xml文件的Namespaces中勾选aop,配置aop:aspectj-autoproxy标签,作用是自动对应到有@Aspect注解所标识的类。
举个例子,创建一个javaweb项目,项目结构如下
在这里插入图片描述
在这里插入图片描述
在IoC容器创建的同时,ComputerAOP对象和ComputerService对象也随之初始化,aop:aspectj-autoproxy查找到ComputerAOP类创建代理类和代理对象,@Before中的语句可以自动为该类下所有返回值类型为public int的方法提供代理,我们打印出此时掌管该类的类名发现是代理类
在这里插入图片描述
若将注解注释掉,打印结果为本类名,说明这些方法没有被代理
在这里插入图片描述

2、观察@Before、@After、@AfterReturning、@AfterThrowing的应用场合

在这里插入图片描述
结果为
在这里插入图片描述
说明@Before对应于方法开始执行之前;@After对应于方法结束;@AfterThrowing对应于抛出异常后;@AfterReturning在出现异常时不执行。
将被除数改为1,运行结果如下
在这里插入图片描述
结论:@AfterReturning是在返回成功时调用;@After是在方法结束之后、执行return之前调用

3、@Around:可以代替前四种

并且ProceedingJoinPoint对象可以调用getTarget()方法,获得被代理的对象
在这里插入图片描述
执行结果
在这里插入图片描述
pjp对象还可以调用proceed()来调用原方法,如下图
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值