云存储做网站seo网站排名优化快速排

web/2025/10/8 4:45:19/文章来源:
云存储做网站,seo网站排名优化快速排,南京模板网站开发,域名估价网站给Advice传递参数 Advice除了可以接收JoinPoint#xff08;非Around Advice#xff09;或ProceedingJoinPoint#xff08;Around Advice#xff09;参数外#xff0c;还可以直接接收与切入点方法执行有关的对象#xff0c;比如切入点方法参数、切入点目标对象#xff08…给Advice传递参数 Advice除了可以接收JoinPoint非Around Advice或ProceedingJoinPointAround Advice参数外还可以直接接收与切入点方法执行有关的对象比如切入点方法参数、切入点目标对象target、切入点代理对象this等。 5.1 获取切入点方法参数 假设我们现在有一个id为userService的bean中定义了一个findById(int id)方法我们希望定义一个Advice来拦截这个方法并且把findById()的参数作为Advice处理方法的参数即每次调用findById()传递的参数都将传递到Advice处理方法那么我们可以如下这样定义。 1 Before(valuebean(userService) execution(* findById(java.lang.Integer)) args(id), argNamesid) 2 public void beforeWithParam(JoinPoint joinPoint, Integer id) { 3 System.out.println(this.getClass().getName() ID is : id); 4 } 上面这种定义是非常精确的定义我们通过表达式“bean(userService) execution(* findById(java.lang.Integer))”就已经明确的指定了我们需要拦截的是id或name为userService的findById(Integer)方法后面又加了一个args(id)是干什么用的呢它的作用跟findById(Integer)是类似的它表示我们的切入点方法必须只接收一个参数而且这个参数的类型是和当前定义的Advice处理方法的参数id是相同类型的在上面的示例中其实就是要求是Integer类型的另外它还有一个非常重要的作用通过这种指定后对应的Advice处理方法在执行时将接收到与之对应的切入点方法参数的值。在上面的示例中笔者特意给Advice处理方法加了一个JoinPoint参数是为了说明JoinPoint、ProceedingJoinPoint参数是可以直接定义在Advice方法的第一个参数并且是可以与其它接收的参数共存的。其实如果我们不只是需要拦截findById(Integer)方法而是需要拦截id为userService的bean中所有接收一个int/Integer参数的方法那么我们可以把上面的配置简化为如下这样。 1 Before(valuebean(userService) args(id), argNamesid) 2 public void beforeWithParam2(int id) { 3 System.out.println(this.getClass().getName() ID is : id); 4 } 如果我们需要拦截的方法可能是有多个参数的但我们只关注第一个参数那我们可以把表达式调整为如下这样只关注第一个参数为int/Integer类型的并且在Advice方法中接收这个方法参数进行相应的处理。 1 Before(valuebean(userService) args(id,..), argNamesid) 2 public void beforeWithParam2(int id) { 3 System.out.println(this.getClass().getName() ID is : id); 4 } 5.2 argNames参数 我们可以看到在上述例子中我们都指定了Before的argNames属性的值为id那么这个argNames属性有什么作用呢argNames属性是用于指定在表达式中应用的参数名与Advice方法参数是如何对应的argNames中指定的参数名必须与表达式中的一致可以与Advice方法参数名不一致当表达式中使用了多个参数时argNames中需要指定多个参数多个参数之间以英文逗号分隔这些参数的顺序必须与对应的Advice方法定义的参数顺序是一致的。比如下面这个示例中我们在Pointcut表达式中使用了name和sex两个参数我们的Advice处理方法接收两个参数分别是sex1和name1我们希望Pointcut表达式中的name参数是对应的Advice处理方法的第二个参数即name1希望Pointcut表达式中的sex参数是对应的Advice处理方法的第一个参数即sex1那么我们在指定Before注解的argNames参数时必须定义name和sex参数与Advice处理方法参数的关系且顺序要求与对应的处理方法的参数顺序一致即哪个参数是需要与Advice处理方法的第一个参数匹配则把哪个参数放第一位与第二个参数匹配的则放第二位在我们的这个示例中就应该是sex放第一位name放第二位。 1 Before(valuebean(userService) args(name, sex), argNamessex, name) 2 public void beforeWithParam3(int sex1, String name1) { 3 System.out.println(sex is : sex1); 4 System.out.println(name is : name1); 5 } Before注解的argNames参数不是必须的它只有在我们编译的字节码中不含DEBUG信息或Pointcut表达式中使用的参数名与Advice处理方法的参数名不一致时才需要。所以在编译的字节码中包含DEBUG信息且Advice参数名与Pointcut表达式中使用的参数名一致时我们完全可以把argNames参数省略。如果表达式里面使用了多个参数那么这些参数在表达式中的顺序可以与Advice方法对应参数的顺序不一致例如下面这个样子。 1 Before(valuebean(userService) args(id)) 2 public void beforeWithParam2(int id) { 3 System.out.println(this.getClass().getName() ID is : id); 4 } 5.3 获取this对象 this对象就是Spring生成的bean的那个代理对象。如下示例就是Advice方法接收this对象我们给Advice方法指定一个需要拦截的this对象类型的参数然后在表达式中使用this类型的表达式定义表达式中定义的对应类型指定为Advice方法参数。 1 Before(this(userService)) 2 public void beforeWithParam4(IUserService userService) { 3 //this对象应该是一个代理对象 4 System.out.println(this.getClass().getName()传递this对 5 象 userService.getClass()); 6 } 5.4 混合使用 我们的Advice方法可以同时接收多个目标方法参数与此同时它也可以接收this等对象即它们是可以混合使用的。下面这个示例中我们就同时接收了this对象和目标方法int/Interger类型的参数。 1 Before(this(userService) args(id)) 2 public void beforeWithParam5(IUserService userService, int id) { 3 System.out.println(this.getClass().getName() id 4 userService.getClass()); 5 } 5.5 获取target对象 获取target对象也比较简单只需要把表达式改为target类型的表达式即可。 1 Before(target(userService)) 2 public void beforeWithParam6(IUserService userService) { 3 System.out.println(this.getClass().getName()传递 4 target对象 userService.getClass()); 5 } 5.6 获取注解对象 当我们的Pointcut表达式类型是通过注解匹配时我们也可以在Advice处理方法中获取匹配的注解对象如下面这个示例其它如使用target等是类似的。 1 Before(annotation(annotation)) 2 public void beforeWithParam7(MyAnnotation annotation) { 3 System.out.println(this.getClass().getName()传递标 4 注在方法上的annotation annotation.annotationType().getName()); 5 } 5.7 泛型参数 有的时候我们的Advice方法需要接收的切入点方法参数定义的不是具体的类型而是一个泛型这种情况下怎么办呢可能你会想那我就把对应的Advice方法参数定义为Object类型就好了反正所有的类型都可以转换为Object类型。对的这样是没有错的但是说如果你只想拦截某种具体类型的参数调用时就可以不用把Advice方法参数类型定义为Object了这样还得在方法体里面进行判断我们可以直接把Advice方法参数类型定义为我们想拦截的方法参数类型。比如我们有下面这样一个使用了泛型的方法定义我们希望只有在调用testParam方法时传递的参数类型是Integer类型时才进行拦截。 1 public T void testParam(T param); 那这个时候我们就可以把我们的Advice的表达式定义为如下这样前者精确定义接收方法名为testParam返回类型为void后者精确定义方法参数为一个Integer类型的参数其实前者也可以定义为“execution(void testParam(Integer))”。看到这你可能会想为什么不直接把表达式定义为“execution(void testParam(param))”呢因为execution是不支持Advice方法参数绑定的基本上支持Advice参数绑定的就只有this、target、args以及对应的注解形式加annotation。 1 Before(execution(void testParam(..)) args(param)) 2 public void beforeWithParam8(Integer param) { 3 System.out.println(pointcut expression[args(param)]--------------param: 4 param); 5 } 以上就是常用的传递参数给Advice处理方法的方式有一些示例可能没有讲到比如target这种这些其实都是类似的。包括上面我们都是以Before这种Advice来讲的其实其它的Advice在接收参数的时候也是类似的。  转载于:https://www.cnblogs.com/fnlingnzb-learner/p/10716049.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

营销型单页面网站智能小区物业管理系统

工商银行通过网银结账的时候,会给出一个类似于B5G7的字符串,让你在自己的口令卡上找到对应的口令码。因为口令卡上的数字挺多的,而且有水印,找起来挺麻烦的,我就花了几十分钟的时间,写了一个快速查找口令卡…

杭州战争网站建设网站开发开源架构

扇区(sector) 硬盘的读写以扇区为基本单位。磁盘上的每个磁道被等分为若干个弧段,这些弧段称之为扇区。硬盘的物理读写以扇区为基本单位。通常情况下每个扇区的大小是 512 字节。linux 下可以使用 fdisk -l 了解扇区大小: $ sudo /sbin/fdisk -l Disk …

优秀网站下载中国企业商标网

一、文章内容 TodoList结构搭建HTML代码 TodoList样式编写Css代码 TodoList行为表现JavaScript代码 二、项目展示 项目介绍 Todolist是一个基于B/S模式开发的待办事项软件,主要功能是离线记录用户的待办事项和已经完成的事情,基于htmlcssjs实现&am…

ppt模板大全免费下载网站什么网站做h5

文章目录链表介绍应用示例链表介绍 链表是有序的列表,但是它在内存中是存储是不连续的,如下: 链表是以节点的方式来存储,是链式存储: ①每个节点包含data域存储数据,next域指向下一个节点 ②链表的各个节点…

网站建设知名网站信息抽查评估 短信

上一篇文章我们学习了如何使用GDB进行软件断点调试和硬件断点调试:【软件开发底层知识修炼】十五 快速学习GDB调试二 使用GDB进行断点调试本篇文章继续上一篇文章的学习,如何使用GDB的数据断点监测内存中的变量是否被改变 文章目录1 GDB的数据断点1.1 利…

邵阳网站建设优化做网站建设的技巧

项目介绍 libcurl是一个跨平台的网络协议库,支持http、https、ftp等多种协议。 项目地址 https://github.com/curl/curl/releases 影响版本 7.69.0-8.3.0 漏洞分析 漏洞成因在于使用SOCKS5代理过程中造成的溢出。当Curl程序使用 SOCKS5代理时,设置…

作风建设 宣讲家网站万户网络技术有限公司官网

使用Python Django框架制作一个音乐网站, 本篇主要是后台对歌曲类型、歌单功能原有功能进行部分功能实现和显示优化。 目录 歌曲类型功能优化 新增编辑 优化输入项标题显示 父类型显示改为下拉菜单 列表显示 父类型显示名称 过滤器增加父类型 歌单表功能优化…

电子商务网站建设专业主修课程国外h5分享网站

文章目录 前言一、geometry是什么?二、geometry常用函数1.OGC标准函数①管理函数②几何对象关系函数③几何对象处理函数④几何对象存取函数⑤几何对象构造函数 2.PostGIS扩展函数①管理函数②几何操作符③几何量测函数④几何对象输出⑤几何对象创建⑥几何对象编辑⑦…

解决国外网站很慢工业产品设计用什么软件

驱动主要包含两部分,平台驱动和器件驱动。平台驱动主要包括通常在SOC内的GPIO、I2C、SPI等;器件驱动则主要包含通常在SOC外的器件,如 LCD、TP、WLAN等 图1 OpenHarmony 驱动分类 HDF驱动被设计为可以跨OS使用的驱动程序,HDF驱动框…

下载免费网站模板下载安装网站登录界面html

该漏洞因为用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中。例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用 %{v…

用记事本做网站纯静态网站开发

连通块记忆性递归的综合运用 这里x,y的设置反我平常的习惯,搞得我有点晕 实际上可以一输入就交换x,y的数据的 如果设置y1为全局变量的话会warning: warning: built-in function y1 declared as non-function 所以我改成p和q了…

茶叶企业网站源码wordpress改了固定链接出现404

jca使用Java密码体系结构(JCA)是一个可扩展的框架,使您能够使用执行加密操作。 JCA还促进实现独立性(程序不应该在乎谁提供加密服务)和实现互操作性(程序不应该与特定加密服务的特定提供者联系在一起&#…

贵州移动端网站建设深圳模板建站多少钱

#!/usr/bin/env python # -*- coding:utf-8 -*- # author:love_cat import cv2 # 接收两个参数,一个是文件名,一个值,如果值为1,接收的是彩色图片,如果值为零,接受的是灰度图片。会有一个返回值&#xff0c…

杭州做网站博客企业所得税优惠政策最新2023规定公告

哈希和unordered系列封装 一、哈希1. 概念2. 哈希函数,哈希碰撞哈希函数(常用的两个)哈希冲突(碰撞)小结 3. 解决哈希碰撞闭散列线性探测二次探测代码实现载荷因子(扩容) 开散列哈希桶代码实现扩…

金融投资网站wordpress 显示指定分类

转自:https://blog.csdn.net/qq_37788067/article/details/79250623概念:集群是个物理形态,分布式是个工作方式。1.分布式:一个业务分拆多个子业务,部署在不同的服务器上2.集群:同一个业务,部署在多个服务器…

温州高端企业网站建设营商环境建设监督局网站

参考引用 C11 14 17 20 多线程从原理到线程池实战代码运行环境:Visual Studio 2019 C多线程学习(一):C11 多线程快速入门 C多线程学习(二):多线程通信和锁 C多线程学习(三&#xff0…

北京个人制作网站有哪些内容网站管理工作是具体应该怎么做

文章目录 普通装饰器decorator0. 万能公式,非常重要1. 便于入门的decorator原理2. 理解函数3. 装饰器的作用:4. 装饰器的语法糖5. 装饰器顺序6. 极简的装饰器7. 装饰器的参数无参 函数装饰器有参 函数装饰器 类装饰器class decorator0. 万能公式,非常重要…

上海网站设计见建设怎样重新安装电脑wordpress

原文链接:赵侠客 前言 枚举类型在开发中是很常见的,有非常多的应用场景,如状态管理、类型分类、权限控制、配置管理、错误码管理、日志级别等。正确合理的使用枚举可以给我们带来非常多的好处: 增强代码可读性:枚举可…

定制企业网站建设制作域名网站怎么打开

1) 新建源文件 打开 CodeBlocks ,在上方菜单栏中选择 “文件 --> 新建 --> 空白文件”,如下图所示: 或者直接按下 Ctrl Shift N 组合键,都会新建一个空白的源文件,如下图所示: 在空白源文件中输入…