如何使用AspectJ修改返回对象的属性?

2023-12-03

我有一个如下所示的类(来自 Spring Roo DataOnDemand),它返回一个新的瞬态(非持久化)对象以用于单元测试。这就是我们从 Spring Roo 的 ITD 进行推送后的代码。

public class MyObjectOnDemand {
    public MyObjectOnDemand getNewTransientObject(int index) {
        MyObjectOnDemand obj = new MyObjectOnDemand();
        return obj;
    }
}

我需要做的是对返回的对象引用进行额外的调用,以设置 Spring Roo 自动生成的方法未处理的其他字段。因此,在不修改上述代码(或从 Roo 的 ITD 中推送它)的情况下,我想再进行一次调用:

obj.setName("test_name_" + index);

为此,我声明了一个新方面,它具有适当的切入点,并且将建议具体方法。

public aspect MyObjectDataOnDemandAdvise {
    pointcut pointcutGetNewTransientMyObject() : 
        execution(public MyObject MyObjectDataOnDemand.getNewTransientObject(int));

    after() returning(MyObject obj) : 
        pointcutGetNewTransientMyObject() {
         obj.setName("test_name_" + index);
    }
}

现在,根据 Eclipse,切入点已正确编写,并且正在建议正确的方法。但它似乎没有发生,因为持久化对象的集成测试仍然失败,因为 name 属性是必需的,但尚未设置。根据 Manning 的 AspectJ in Action(第 4.3.2 节),after 建议应该能够修改返回值。但也许我需要做一个 around() 建议呢?


我本来会在 tgharold 回复中添加评论,但没有足够的声誉。 (这是我的第一篇文章)

我知道这已经过时了,但我认为它可以帮助其他正在此处查看的人知道可以使用 AspectJ 中的前建议或后建议中获取参数thisJoinPoint.

例如:

after() : MyPointcut() {
    Object[] args = thisJoinPoint.getArgs();
    ...

更多信息请访问:http://eclipse.org/aspectj/doc/next/progguide/language-thisJoinPoint.html.

希望它对某人有用。

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

如何使用AspectJ修改返回对象的属性? 的相关文章

  • spectj 中 .. 和 * 是什么意思

    我的理解是 is 0 Many参数和 是一个参数any姓名 它是否正确 spectj 是否支持类似语法args myArg 这是来自 AspectJ 网站 http www eclipse org aspectj doc next prog
  • AspectJ:验证错误

    我正在尝试面向方面的编程 我已经安装了AspectJ 插件 http eclipse org aspectj index php在 Eclipse 中并遵循本中提到的所有步骤tutorial http sites google com si
  • @AspectJ。 scala(也可能是 java)lambda 的切入点

    是否可以为 scala lambda 提供 poitcut 如果我没有记错的话 scala lambdas 现在的编译方式与 java lambdas 相同 所以我认为我的问题也适用于 java lambdas 但我不确定 这是代码 基本上
  • 关于使用 AspectJ 执行策略

    我正在使用 Aspectj 来执行项目范围内的策略 我现在尝试实现的一件事是 除了使用 Guava 进行简单验证之外 任何 setter 方法中都不应该有任何逻辑Preconditions check 方法 public pointcut
  • Tomcat 7 - 在运行时获取应用程序名称,无需通过java-agent/aspectj登录

    我正在尝试获取所有已部署应用程序的列表 特别是映射到 tomcat root 的应用程序名称 我希望能够在运行时使用 java 代理来收集 tomcat 服务器上的信息 我尝试使用这个代码示例 private Iterable
  • Spring AOP中代理的使用

    我正在读一本书 其中谈到启用AspectJSpring AOP 的支持 下面是书中的一段话 要在 Spring IoC 容器中启用 AspectJ 注释支持 您只需定义一个空的 bean 配置文件中的 XML 元素 aop aspectj
  • 当方法签名包含 Object ... args 时,如何在 JSF 中使用动态代理

    我在使用 Spring JPA 和动态代理 DAO 类时遇到一些问题 这些类被初始化为 Spring Beans 这个特定的项目在持久性 事务方面一直困扰着我一段时间 我想一劳永逸地解决这个问题 首先 这是 DAO 接口的一个方法 Perf
  • 为什么我在制作 Spring 项目时会收到​​ not Exposure to the weaver 警告?

    当我制作 Spring 项目时 我似乎收到了很多这样的警告 该项目使用编译时编织和各种 Spring 注释 例如 Transactional Autowired 和 Configurable 我有三个问题 它们是什么 有什么效果 我应该关心
  • Java Aspect 返回要在方法中使用的值

    我有一个 After运行某些逻辑的java方面 我需要它返回一个结果 一个对象 该结果可以在方面切入点拦截的方法中使用 是否可以 你需要的是 Around它允许您将想要的任何内容返回给建议的对象 Around com xyz myapp U
  • 通过spring AOP + Aspectj进行异常处理

    在我的项目中 我有一个域层 它基本上是 POJO 和一个位于域层之上的 Spring 控制器 服务层 我还有一个位于服务和域之间的 AOP 层 我的域层正在抛出业务异常 这些异常现在正在服务层中处理 但是我想更改它 以便从领域层抛出的异常将
  • Gradle 应用程序插件:如何使用 -javaagent 选项运行 jvm 应用程序?

    我使用 gradle v1 10 中的应用程序插件来打包和运行我的应用程序 所以 现在我需要使用方面 aspectj 并且我不想使用方面j编译器 ajc 是否可以调整 gradle 应用程序运行脚本 以便我的应用程序可以通过加载时编织来运行
  • Spring Roo 的 Maven 存储库

    我的目的是使用我的本地 Nexus 安装代理 Roo Maven 存储库 以便它将包含 Roo 1 2 0 RELEASE 包 On http static springsource org spring roo reference htm
  • Eclipse for Roo 项目中的自动完成

    我有一个 Roo 项目 我在其中创建了几个实体 当我在 Eclipse 中加载该项目时 它加载得很好 但是如果我创建一个实例MyEntity entity然后写entity 我在自动完成列表中没有获得任何属性 即 getMyField 如果
  • Spring AOP 日志拦截器和 JAXB 问题

    我正在尝试将日志记录方面实现到我的应用程序中 这是我第一次尝试 AOP 所以如果我遗漏了一些明显的东西 请告诉我 为了实现编织外部 jar 我正在尝试实现加载时间编织器 我确实在应用程序上下文中指定了加载时编织器 并在 context xm
  • AspectJ 加载时间编织不适用于 Spring beans

    我正在开发一个项目 该项目使用 Spring 配置的 Java 而不是 xml 风格来连接依赖项 它还具有分析逻辑 应通过 AspectJ 将其编织到所需的方法上 通过注释 设置正在运行 我可以看到我想要的包中的类正在编织 并且分析信息已从
  • JDBC 驱动程序不适用于 Spring Roo 上的“org.postgresql.Driver”

    我正在尝试使用database reverse engineer 请参阅完整的 Roo v1 3 脚本和 UBUNTU 环境 这个简单的 你好 脚本 https github com ppKrauss dummy java spring b
  • Spring AOP 是否进行编译时编织或加载时编织?

    我开始在一个项目中使用 Spring AOP 但我对编织有点困惑 我知道 Spring AOP 依赖于 AspectJweaver jar 但正如文档所说 这不是为了编织 而只是它使用了这个 jar 中的一些类 但我的问题是 如果不使用As
  • spring roo vs appfuse 生成服务/dao 层

    我正在寻找有经验的用户对 spring roo 和 appfuse 的反馈 您认为逆向工程数据库表和生成服务层 dao 层和 jpa 实体哪一个更好 如果我没记错的话 spring roo 目前无法对数据库进行逆向工程 只是一个快速更新 通
  • 不支持动态值作为注释中的属性 - AspectJ Android [AOP Android]

    我正在使用自定义注释来记录用户单击的 id 但我收到一个错误 属性值必须是常量 我的代码片段如下 mAssetId Asset getContentId TrackEvent track event ArrayParams Params k
  • 如何使用 AspectJ 将字段添加到自定义注释的类

    要使用aspectj向某个特定类添加字段 我们需要这样做 package com test public class MyClass private String myField public aspect MyAspect private

随机推荐

  • 如何使用jtextfield搜索jtable中的数据?

    我在 netbeans 中创建 jtable 并在 jtable 中填充数据库中的数据 但我无法使用 jtextfield 在 jtable 中实现搜索选项 任何人都可以指导我吗 谢谢 为了搜索表格上的内容 您必须将原始内容存储在某个变量中
  • MongoDB 聚合 - 合并对象数组

    我想使用聚合框架获得 MongoDB 3 4 中对象中所有数组的并集 这是输入 id 001 name something important part foo 1 2 3 bar 4 5 x 6 7 这应该是输出 id 001 name
  • 更改 AlertDialog 按钮对齐方式

    为更改 AlertDialog support v7 之一 内按钮的对齐方式而奋斗了几个小时 因为它们不会根据区域设置视图方向自行对齐 尽管整个应用程序确实左对齐 AlertDialog 中的文本也左对齐 你说为什么会发生这种情况 我正在以
  • subprocess.Popen shell=True 到 shell=False

    我知道对子进程使用 shell True 是不好的做法 但是对于这行代码 我不确定如何使用 shell False 执行它 subprocess Popen candump tA can0 can1 gt gt s file name sh
  • 在 Pandas 中重采样和进行线性插值

    我有一个数据 其中包含Id DateTime and Value柱子 数据应该每 10 分钟收集一次 然而 有些数据的间隔超过 10 分钟 例如间隔超过 20 分钟 1 小时 2 小时 收集一整月的数据 我想使用重新采样并在我的Value
  • 在 Mac 10.8 上从另一个本地设备访问 Meteor 本地 Web 服务器

    我正在开发一个 Meteor 网站 方便地 它将使用简单的命令在本地主机上运行 meteor 但是 我希望能够从本地网络上的其他计算机访问该网站 我想这样做的主要原因是为了在移动设备上查看和测试应用程序 我运行的是 Mac Mountain
  • 如何防止 Firebase 匿名用户令牌过期

    我使用的是 Firebase 应用程序的匿名身份验证 我刚刚注意到我现在有超过 100 个匿名用户注册 尽管我所做的只是测试该应用程序 看起来用户令牌的过期时间很短 一旦过期 下次登录就会创建一个新用户 避免这种情况的最佳方法是什么 我大概
  • 如何禁止不在服务器中的人

    我想知道是否可以通过以下方式禁止某人User ID 通常 要禁止某人 您可以使用GuildMember和 ban method GuildMember ban However 如果用户不在您想要禁止他们加入的公会中 则不可能获得他们的Gui
  • OpenGL:将 VBO 与 std::vector 结合使用

    我正在尝试加载一个对象并使用 VBO 和 glDrawArrays 来渲染它 问题是像这样的简单浮点指针float f 在我的情况下不起作用 因为我超过了该指针可以存储的值的限制 所以我的解决方案是使用向量 而且它不起作用 这是我的代码 u
  • 在 .NET Winforms 应用程序中保存设置[重复]

    这个问题在这里已经有答案了 可能的重复 存储 NET 应用程序的用户设置的最佳方式是什么 我发现了很多关于如何从 Winforms 应用程序保存应用程序设置 每个用户 的非常不同的示例 我想在 C 中执行此操作的正确方法非常简单 希望有人能
  • 在单个 DataGridView 单元格中设置两种颜色的文本

    我的 C Windows 应用程序中有一个数据网格视图 我需要更改单元格中最后 5 个字符的颜色 但我不知道该怎么做 我在 CellPainting 事件中有此代码 但不起作用 private void dgvSorteados CellP
  • 如何使用ajax调用将对象传递给控制器

    我想将一个对象传递给控制器 并检索控制器中的值 我的定义如下 网页代码 var positionarray JavaScript button live click function positionarray push id sessio
  • 在 C 中从字符串调用函数

    在 C 中 如何通过名称作为字符串来调用函数 我有这个 int main int argc const char argv char events test test2 int i 0 for i lt 2 i char event eve
  • 如何在 Android 内部存储上创建文件?

    我想将内部存储上的文件保存到特定文件夹中 我的代码是 File mediaDir new File media if mediaDir exists mediaDir createNewFile mediaDir mkdir File f
  • 从 DOM 中删除 HTMLCollection 元素

    我有一个段落元素的集合 有些是空的 有些只包含空格 而另一些则有内容 p Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpi
  • 如何构建新的 ASP MVC 应用程序?

    我需要启动一个新的 mvc 项目 并且一如既往地我有关于 ASP 身份的问题 永远不知道把它放在哪里 我计划像这样组织解决方案 ProjectWebUI 具有 asp 身份框架的 mvc 应用程序 由具有身份验证的互联网模板制成 Proje
  • Racket 流会记住它们的元素吗?

    当从无限流中计算大量数字时 Racket 是否使用记忆 因此 举例来说 如果我打印 也称为计算并显示 无限整数流上的前 400 个数字 1 2 3 399 400 就在我要求打印这个无限流上的前 500 个数字之后 第二组计算会使用记忆吗
  • Laravel 迁移更改使列可以为空

    我创建了一个未签名的迁移user id 我怎样才能编辑user id在新的迁移中也能做到这一点nullable Schema create throttle function Blueprint table table gt increme
  • 在iOS应用程序中使用本地视频文件(xcode)

    我正在寻找在 iOS 应用程序中播放视频文件的最佳方式 我的应用程序目前正在开发中 将有大约 50 个视频 每个视频长 30 秒 和简短教程 如果可能的话 我希望它们全部在本地 这样用户就可以在没有互联网连接时观看视频 我在堆栈溢出上找不到
  • 如何使用AspectJ修改返回对象的属性?

    我有一个如下所示的类 来自 Spring Roo DataOnDemand 它返回一个新的瞬态 非持久化 对象以用于单元测试 这就是我们从 Spring Roo 的 ITD 进行推送后的代码 public class MyObjectOnD