返回顶部
首页 > 资讯 > 精选 >Spring AOP中args()和argNames的含义是什么
  • 954
分享到

Spring AOP中args()和argNames的含义是什么

2023-06-20 14:06:43 954人浏览 泡泡鱼
摘要

本篇内容介绍了“spring aop中args()和argNames的含义是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!args()的

本篇内容介绍了“spring aop中args()和argNames的含义是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

args()的作用主要有两点:

切入点表达式部分如果增加了args()部分,那么目标方法除了要满足execution部分,还要满足args()对方法参数的要求,对于符合execution表达式,但不符合args参数的方法,不会被植入切面。

定义了args()之后,才能把目标方法的参数传入到切面方法的参数中(通过Joinpoint也可以获取参数,但当前方法是直接用切面方法参数接受)。

示例1

目标方法:

@RestController@RequestMapping("/testAop")public class TestController {    private Logger logger = LoggerFactory.getLogger(TestController.class);     @RequestMapping("/helloworld")    public String helloWorld(String id, Integer age){        System.out.println("被代理方法正在执行");        return null;    }}

切面方法

@After("execution(* com.bxp.controller.TestController.*(..)) && args(userId, userAge)")    public void after(JoinPoint point, String userId, Integer userAge){        System.out.println("userId===========" + userId);        System.out.println("userAge===========" + userAge);    }

输出结果:

被代理方法正在执行
userId===========bian1996
userAge===========24

定义了args(userId, userAge)才能把目标方法helloWorld(String id, Integer age)的参数传入到增强处理方法after的参数中,id参数对应userId,age参数对应userAge。使用的方法是按顺序一一对应,helloWorld第一个参数对args第一个参数,helloWorld第2个参数对args第2个参数。

切入点表达式部分增加了&&args(userId, userAge)部分,意味着可以在增强处理方法中定义userId、userAge两个形参------定义这两个形参时,形参类型可以随意指定,但是一旦指定,譬如这里分别是String类型和Integer类型,这两个形参类型将用于限制该切入点只匹配第一个参数类型为String,第二个参数类型为Integer的方法。

也就是,args()中的参数会和目标方法的参数除了在顺序上一一对应之外,在类型上也要对应,否则匹配失败,如下两种情况都会匹配失败。

@RequestMapping("/helloworld")public String helloWorld(Integer id, Integer age){    System.out.println("被代理方法正在执行");    return null;} @After("execution(* com.bxp.controller.TestController.*(..)) && args(userId, userAge)")public void after(JoinPoint point, String userId, String userAge){    System.out.println("userId===========" + userId);    System.out.println("userAge===========" + userAge);}@RequestMapping("/helloworld")public String helloWorld(Integer sex, String id, Integer age){    System.out.println("被代理方法正在执行");    return null;}  @After("execution(* com.bxp.controller.TestController.*(..)) && args(userId, userAge)") public void after(JoinPoint point, String userId, Integer userAge){    System.out.println("userId===========" + userId);    System.out.println("userAge===========" + userAge); }

除此之外,使用args()表达式时还可使用如下形式:args(userId, userAge,..),这表明增强处理方法中可以通过userId, userAge来访问目标方法的参数。注意上面args表达式括号中的2点,它表示可以匹配更多参数,但是只要前两个userId, userAge参数匹配上了,目标方法就可以被匹配上。

argNames是可选的,如果没有argNames这个参数,而编译器设置了【在class文件生成变量调试信息】,则spring可以通过反射知道方法参数的名字,通过名字配对,Spring知道args(userId, userAge)表达式里面的userId和userAge,对应了增强方法public void after(JoinPoint point, String userId, Integer userAge)方法里面的userId和userAge,就是第一个示例的情况:

总结

目标方法和args()通过参数顺序一一进行匹配

args()和增强方法通过参数名称一致进行匹配。

但是,如果设置了argNames,Spring不再使用方法参数的名字来配对,使用argNames定义的顺序来给

after(JoinPoint point, String userAge, String userId)的参数传值,例如:argNames="userId,userAge",userId在userAge前面,表示after方法第一个参数(JoinPoint 除外)是userId,第二个参数是userAge,示例如下:

目标方法

@RequestMapping("/helloworld")public String helloWorld(String id, String age){    System.out.println("被代理方法正在执行");    return null;}

切面方法

@After(value = "execution(* com.bxp.controller.TestController.*(..)) && args(userId, userAge)", argNames = "userId,userAge")public void after(JoinPoint point, String userAge, String userId){    System.out.println("userId===========" + userId);    System.out.println("userAge===========" + userAge);}

请求连接和输出结果

请求连接
Http://localhost:8088/testAop/helloworld?age=24&id=bian1996

输出结果
被代理方法正在执行
userId===========24
userAge===========bian1996

注意:这一次两个参数的类型都给成String类型了

总结:

目标方法和args()通过参数顺序一一进行匹配

args()和argNames通过参数名称一致进行匹配

argNames和增强方法通过参数顺序一一对应。

“Spring AOP中args()和argNames的含义是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Spring AOP中args()和argNames的含义是什么

本文链接: https://lsjlt.com/news/297367.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Spring AOP中args()和argNames的含义是什么
    本篇内容介绍了“Spring AOP中args()和argNames的含义是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!args()的...
    99+
    2023-06-20
  • 浅谈Spring AOP中args()和argNames的含义
    args()的作用主要有两点: 1、切入点表达式部分如果增加了args()部分,那么目标方法除了要满足execution部分,还要满足args()对方法参数的要求,对于符合execu...
    99+
    2024-04-02
  • spring中ioc和aop的原理是什么
    Spring中的IOC(控制反转)和AOP(面向切面编程)是两个核心概念,它们的原理分别如下: 1、IOC(控制反转)的原理:IOC...
    99+
    2024-04-02
  • python中%和~的含义是什么
    本篇内容介绍了“python中%和~的含义是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!%有哪几种含义?查找手册翻看《The Pyth...
    99+
    2023-06-30
  • Spring中的AOP操作是什么
    本篇内容主要讲解“Spring中的AOP操作是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring中的AOP操作是什么”吧!一、AOP操作术语 1. 连接点类里面哪些方法可以...
    99+
    2023-06-29
  • Spring中AOP的概念是什么
    这篇文章主要介绍“Spring中AOP的概念是什么”,在日常操作中,相信很多人在Spring中AOP的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Spring中AOP的概念是什么”的疑惑有所帮助!...
    99+
    2023-07-02
  • es6和es7的含义是什么
    今天小编给大家分享一下es6和es7的含义是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2024-04-02
  • JavaScript中Set的含义和用法是什么
    本篇内容介绍了“JavaScript中Set的含义和用法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • c++中::是什么含义
    作用域解析运算符 :: 用于指定标识符的作用域,并访问该作用域中的成员,包括:访问全局变量和函数访问类成员访问静态成员避免过度使用 ::,以保持代码的可读性和可维护性。 C++ 中 :...
    99+
    2024-04-26
    c++ 作用域
  • spring中aop的执行原理是什么
    在Spring中,AOP(面向切面编程)的执行原理主要涉及以下几个方面:1. 切面的定义:通过注解或配置文件等方式,定义切面(Asp...
    99+
    2023-08-09
    spring aop
  • PHP的中文含义是什么
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑PHP 全称 PHP Hypertext Preprocessor,是“超文本预处理器”的意思。它是一种跨平台的、开源的、服务器端执行的脚本语言,其语法吸收了C语言、J...
    99+
    2017-01-22
    PHP
  • javascript中double的含义是什么
    这篇文章主要讲解了“javascript中double的含义是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript中double的含义是什...
    99+
    2024-04-02
  • HTML中input的含义是什么
    本文小编为大家详细介绍“HTML中input的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML中input的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • HTML中title的含义是什么
    本文小编为大家详细介绍“HTML中title的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML中title的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • node.js中url的含义是什么
    本篇内容主要讲解“node.js中url的含义是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“node.js中url的含义是什么”吧! ...
    99+
    2024-04-02
  • css中translate的含义是什么
    这篇文章主要介绍“css中translate的含义是什么”,在日常操作中,相信很多人在css中translate的含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”cs...
    99+
    2024-04-02
  • html的中文含义是什么
    这篇文章主要介绍“html的中文含义是什么”,在日常操作中,相信很多人在html的中文含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html的中文含义是什么”的疑惑...
    99+
    2024-04-02
  • CSS中background的含义是什么
    本文小编为大家详细介绍“CSS中background的含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“CSS中background的含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,...
    99+
    2024-04-02
  • Linux中点的含义是什么
    这篇文章主要介绍了Linux中点的含义是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Paul Brown 解释了 Linux shell 命令中那个不起眼的“点”的各种...
    99+
    2023-06-16
  • git中staged的含义是什么
    这篇文章主要讲解了“git中staged的含义是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“git中staged的含义是什么”吧!在git中,staged用于表示文件的状态,是暂存状态...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作