AspectJ - 匹配具有通用参数的方法的切入点

2024-04-30

我有一个接受任何类型作为其参数的通用方法。
例如,我想要一个切入点,它与仅以“String”类型作为参数的方法的调用相匹配。最终的要求是将建议执行的范围限制为“字符串”参数。

这是我的通用类和方法:

public class Param<T> {
    public T execute(T s){
        return s;
    }
}

主类:我的应用程序以布尔值和字符串作为参数调用该方法。

public static void main(String[] args) {
    Param<String> sp = new Param<String>();
    String rs = sp.execute("myString"); //want a joint point

    Param<Boolean> bp = new Param<Boolean>();
    Boolean rb = bp.execute(true); //dont want a joint point
}

下面的切入点对于字符串和布尔参数都有效(实际上适用于任何类型)。但我想要一个切入点,仅当参数为 String 类型时才拦截方法调用。

@Pointcut("call(* com.amazon.auiqa.aspectj.generics.Param.execute(**))")
void param(){}

@Pointcut("execution(Object com.amazon.auiqa.aspectj.generics.Param.execute(Object))")
void param(){}

以下内容对我不起作用:

 @Pointcut("execution(String com.amazon.auiqa.aspectj.generics.Param.execute(String))")
 @Pointcut("call(String com.amazon.auiqa.aspectj.generics.Param.execute(String))")

我想知道是否有可能在这里实现我想要实现的目标。我想对方法返回类型做同样的事情。


您无法使用 AspectJ 或任何其他字节码操作库来执行此操作,因为泛型类型信息实际上会从编译的字节码中删除(从 Java 9 开始),因此您的泛型方法将变为public Object execute(Object s),因为类型参数T是无界的。看类型擦除 https://docs.oracle.com/javase/tutorial/java/generics/erasure.html有关详细信息,请参阅 Java 文档。

虽然原始方法签名以元数据的形式保留,但编译器可以在针对泛型代码进行编译时检查是否遵守类型边界,但这不会以任何方式帮助您确定该类的实例的泛型类型参数被实例化,因为该信息根本不存在。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AspectJ - 匹配具有通用参数的方法的切入点 的相关文章

  • 在 mvn 命令中指定 pom.xml 并混合其他项目的目标

    我有多个问题 我可以在 mvn 命令中指定 pom xml 吗 在当前项目上执行 mvn 命令时 我可以混合另一个项目的目标吗 例如 mvn clean otherproject comple otherproject install ot
  • JDK 文档是语言规范的一部分吗?

    只有一名官员Java语言规范 https docs oracle com javase specs jls se8 html index html所有 Java 实现都必须遵守它 API文档怎么样 所有Java实现都需要遵守吗这个版本 ht
  • Spring Security 自定义过滤器

    我想自定义 Spring security 3 0 5 并将登录 URL 更改为 login 而不是 j spring security check 我需要做的是允许登录 目录并保护 admin report html 页面 首先 我使用教
  • 通过SOCKS代理连接Kafka

    我有一个在 AWS 上运行的 Kafka 集群 我想用标准连接到集群卡夫卡控制台消费者从我的应用程序服务器 应用程序服务器可以通过 SOCKS 代理访问互联网 无需身份验证 如何告诉 Kafka 客户端通过代理进行连接 我尝试了很多事情 包
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • Spring Boot自动装配存储库始终为空[重复]

    这个问题在这里已经有答案了 每次我进入我的服务类时 存储库似乎都没有自动连接 因为它不断抛出 NullPointerException 谁能帮我检查一下我缺少什么吗 这是我的代码 演示应用程序 java package com exampl
  • Integer.parseInt("0x1F60A") 以 NumberformatException 结束

    我尝试从数据库中获取长字符串内的表情符号代码 格式如下 0x1F60A 所以我可以访问代码 但它将是String 起初 我尝试通过执行以下操作来转换变量tv setText beforeEmo getEmijoByUnicode int e
  • Spring Security SAML2 使用 G Suite 作为 Idp

    我正在尝试使用 Spring Security 5 3 3 RELEASE 来处理 Spring Boot 应用程序中的 SAML2 身份验证 Spring Boot 应用程序将成为 SP G Suite 将成为 IDP 在我的 Maven
  • Jackson XML ArrayList 输出具有两个包装器元素

    我在 Jackson 生成的 XML 输出中得到了两个包装器元素 我只想拥有一个 我有一个 Java bean Entity Table name CITIES JacksonXmlRootElement localName City pu
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • 返回 Java 8 中的通用函数接口

    我想写一种函数工厂 它应该是一个函数 以不同的策略作为参数调用一次 它应该返回一个函数 该函数根据参数选择其中一种策略 该参数将由谓词实现 嗯 最好看看condition3为了更好的理解 问题是 它没有编译 我认为因为编译器无法弄清楚函数式
  • Hamcrest Matchers - 断言列表类型

    问题 我目前正在尝试使用 Hamcrest Matchers 来断言返回的列表类型是特定类型 例如 假设我的服务调用返回以下列表 List
  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • 使用按钮作为列表的渲染器

    我想使用一个更复杂的渲染器 其中包含列表的多个组件 更准确地说 类似于this https stackoverflow com questions 10840498 java swing 1 6 textinput like firefox
  • 如何重新启动死线程? [复制]

    这个问题在这里已经有答案了 有哪些不同的可能性可以带来死线程回到可运行状态 如果您查看线程生命周期图像 就会发现一旦线程终止 您就无法返回到新位置 So 没有办法将死线程恢复到可运行状态 相反 您应该创建一个新的 Thread 实例
  • 泛型、数组和 ClassCastException

    我想这里一定发生了一些我不知道的微妙事情 考虑以下 public class Foo
  • 在浏览器刷新中刷新检票面板

    我正在开发一个付费角色系统 一旦用户刷新浏览器 我就需要刷新该页面中可用的统计信息 统计信息应该从数据库中获取并显示 但现在它不能正常工作 因为在页面刷新中 java代码不会被调用 而是使用以前的数据加载缓存的页面 我尝试添加以下代码来修复

随机推荐

  • Embeddable、Hibernate 中的多对一关系

    我有一个场景Embeddablehibernate 中的类使用Entity 根据我在SO和其他链接上找到的各种答案 我们可以写 ManyToOne OneToMany里面一个Embeddable class 但这样做让我HibernateM
  • 用 Python 重复读取 CSV?

    我正在尝试根据我已有的 csv 检查提取的数据的值 它只会循环遍历 CSV 的行一次 我只能检查 feed items 的一个值 我需要在某处重置某个值吗 有没有更好 更有效的方法来做到这一点 谢谢 orig csv reader open
  • 如何在 Visual Studio 代码中切换文本大小写

    如何在 Visual Studio Code 中切换突出显示文本的大小写 VS 通过 CTRL SHIFT U 和 CTRL U 允许这样做 是否有一个命令绑定可以设置来执行此操作 或者默认情况下是其他组合键 Echoing 只是另一个开发
  • 正则表达式匹配时间

    我希望我的用户能够输入时间表单 如果需要更多信息 用户用它来表示完成任务需要多少时间 如果填满 它将保存在数据库中 这是我所拥有的 0 1 0 9 2 0 4 0 5 0 9 0 5 0 9 它匹配空表单或 01 30 和 01 30 00
  • 如何使用PIL读取原始图像?

    我有一个原始图像 其中每个像素对应一个 16 位无符号整数 我正在尝试使用 PIL Image fromstring 函数进行读取 如以下代码所示 if name main if len sys argv 4 print Error mis
  • 我可以停止 CakePHP 获取查询的所有行吗?

    我正在使用 CakePHP 和 modelName gt find 调用选择相当多的行 可能是数百行 通常 在 PHP MySQL 中这当然不会成为问题 因为您在 while 循环中获取它们 但是 CakePHP 将所有行加载到一个数组中
  • 标准化设备坐标

    我正在编写一个处理 2D 图形形状的库 I m just wondering why should my coordinate system range from 1 1 for both the x and y axis instead
  • Angular 6:i18n:如何更新已翻译的现有 .xlf 文件?

    在 Angular 6 中 现在我想我理解了如何制作 i18n 文件并利用它们 例如https angular io guide i18n https angular io guide i18n 我想知道如何维护所述文件 如果我进入并更改
  • Docker - Spring Boot 应用程序 - 无法访问本地主机上的 MySql 服务器

    如何将在 Docker 中运行的 Spring Boot JAR 应用程序连接到我计算机上的 MySql 服务器 我尝试了不同的帖子 但这没有帮助 在我的 Spring Boot application properties 中 我有 sp
  • 如何在 R 中导入 matlab 表

    我有一个matlab mat文件与表数据类型我想将其导入 R 中 我为此使用 readMat R 正在将其作为列表读取 之后有没有办法将列表转换为 R 中的数据帧或表格格式 当我使用as dataframe我收到以下错误 Error in
  • 名称中带有点的 php 对象属性

    我有 mysql 表 其中包含 操作 日期 操作 名称 等列 将该表数据作为对象获取后 mysqli gt fetch object 我得到这个 行的 print r stdClass Object id gt 2 operation da
  • Composer - 添加 git 存储库而不使用composer.json

    我尝试从 github designmodo Flat UI 添加存储库 使用配置并收到错误No valid composer json was found in any branch or Your requirements could
  • Autodesk Forge BIM 360 API - 激活服务类型

    我们一直在使用 Forge API 在 BIM 360 中自动设置项目 但似乎无法找到自动激活服务 Field Glue 等 的方法 直觉上 我认为 service types 属性是执行此操作的方法 但服务没有激活 1 service t
  • 生产中未找到 symfony 2 路线

    我有这样的路线 login register 等 在开发环境中工作正常 起初 当我尝试通过 app php 而不是 app dev php 访问我的网站时 出现 404 错误 然后我跟着这个建议 https stackoverflow co
  • 可以将sharedPrefrence与Coroutine kotlin一起使用吗

    我已经注射了sharedPreference in ViewModel 我可以在嵌入 Coroutine 作用域时使用 Android 特定资源吗 当 ViewModel 失去作用域时 Coroutine 作用域会自动挂起 我的意思是 如果
  • 在日期 presto SQL 上运行总和

    我正在尝试使用 Presto SQL 根据下面的示例数据计算某个日期内 t 列和 s 列的累积总和 Date T S 1 2 19 2 5 2 1 19 5 1 3 1 19 1 1 我想得到 Date T S cum T cum S 1
  • ReDim 在 VB6 中保留为多维数组

    我正在使用 VB6 我需要做一个ReDim Preserve到多维数组 Dim n m As Integer n 1 m 0 Dim arrCity As String ReDim arrCity n m n n 1 m m 1 ReDim
  • 如何使用新的 html 文件打开更新电子浏览器窗口

    我是电子新手 我有两个 html 页面 我想在单击按钮时打开第二个页面 我的代码如下 但我只是得到一个空白窗口 不是第二页 这是index js const electron require electron const app Brows
  • 仅当存在 2 个类时,才能使用 CSS 定位元素吗?

    您可能已经知道 元素上可能有多个类 并用空格分隔 Example div class content main div 借助 CSS 您可以瞄准这一点div与任一 content or main 有没有办法瞄准它 如果并且仅当两个班都在吗
  • AspectJ - 匹配具有通用参数的方法的切入点

    我有一个接受任何类型作为其参数的通用方法 例如 我想要一个切入点 它与仅以 String 类型作为参数的方法的调用相匹配 最终的要求是将建议执行的范围限制为 字符串 参数 这是我的通用类和方法 public class Param