博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Spring-AOP-学习笔记-7】@Around增强处理简单示例
阅读量:5953 次
发布时间:2019-06-19

本文共 1933 字,大约阅读时间需要 6 分钟。

  • 项目结构
  • 定义切面类、连接点注解类
  • 为待增强的方法--添加注解声明
  • AspectJ配置文件
  • 测试类xxx
  • 测试结果

Around 增强处理-简单介绍

  • 既可以在目标方法之前织入增强动作,也可以在执行目标方法之后织入增强动作;
  • 它可以决定目标方法在什么时候执行,如何执行,甚至可以完全阻止目标目标方法的执行;
  • 它可以改变执行目标方法的参数值,也可以改变执行目标方法之后的返回值;
  • 当需要改变目标方法的返回值时,只能使用Around方法;
虽然Around功能强大,但通常需要在线程安全的环境下使用。因此,如果使用普通的Before、AfterReturing增强方法就可以解决的事情,就没有必要使用Around增强处理了。

一、项目结构

731047-20160906143348551-1254861664.png

二、定义切面类、连接点注解类

731047-20160906143349160-1239619844.png

PointCut连接点注解类
731047-20160906143349613-555204206.png
说明:
这是一个注解类型:
@interface
类中设置了一个methodName属性;

定义切面类
731047-20160906143351629-81021347.png
说明:
  • @Around定义了此方法为 Around增强处理方法;
  • @annotation(around):参数around应该与增强处理方法中的参数名保持一致,该声明指定了pointcut连接点,也可以使用其他方式,如:
 pointcut="execution(* org.crazyit.app.service.impl.*.*(..))";
  • point.proceed()调用了目标方法,并获取其返回值;

三、为待增强的方法--添加注解声明

在上面定义@Around增强时,通过
@annotation() 方式指定了pointcut,其中方法参数为连接点注解类
aroundAuthority
731047-20160906143352113-1847602608.png
如果需要对某一方法进行增强,只需要在相应的方法上添加上此注解即可,如下:
731047-20160906143352582-926957670.png
731047-20160906143353004-513274031.png

四、AspectJ配置文件

731047-20160906143353676-1578403486.png
731047-20160906143354082-1220419107.png
 
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
  4. xmlns:task="http://www.springframework.org/schema/task" xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
  8. http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
  9. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
  10. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
  11. <!-- 启动@AspectJ支持 -->
  12. <aop:aspectj-autoproxy />
  13. <context:component-scan base-package="com.sssppp.Spring.aop">
  14. </context:component-scan>
  15. </beans>

五、测试类

731047-20160906143354926-722805548.png

六、测试结果

可能的输出结果:
731047-20160906143355363-1762163164.png


731047-20160906143355926-1721903993.png


731047-20160906143356566-1537548301.png

七、其他类型增强处理方式

@AfterThrowing增强处理简单示例
 
《@AfterReturning增强处理简单示例》  
《@After后向增强处理简单示例》  
《@Before前向增强处理简单示例》   

转载地址:http://ueaxx.baihongyu.com/

你可能感兴趣的文章
Python元类
查看>>
groovy环境搭建,配置报错
查看>>
简单说说JAVA的String和byte[]的关系
查看>>
Python 多进程本机共享内存(二)
查看>>
Oracle数据库时间戳转date类型进行判断操作
查看>>
过剩通勤应用——线性规划问题解决开源工具(下篇)
查看>>
使用Dom4j进行XML解析
查看>>
SplObserver观察者模式
查看>>
Dubbo架构设计详解
查看>>
使用JavaMail技术发送邮件
查看>>
[C++] 基础知识点:namespace
查看>>
Angular通过CORS实现跨域方案
查看>>
创建线程的四种方式
查看>>
大唐电信[600198]股票
查看>>
yii2 controller 接收get形式传输过来的参数
查看>>
Spring MVC控制流程与简易配置方案
查看>>
开启OpenStack Api跨域请求(CORS)功能
查看>>
拓步T66Ⅱ(牛牛2)Root教程
查看>>
redis的简单学习2.1-redis的数据类型
查看>>
《每个设计师都应该掌握的50个css代码段》11~20段
查看>>