AspectJ 和 CDI

2023-11-30

我正在尝试找出一种将 bean 注入某个方面的方法。

I mean

public class Greeter {
    public String greet(String name) {....}
}

...

public aspect GreeterAspect {
    @Inject
    private Greeter greeter

    ...
}

使用 Arquillian + Wildfly 8.2.1(托管和远程)将其作为 JUnit 测试执行,我得到以下日志行:

WELD-000119: Not generating any bean definitions from x.y.z.Greeter because of underlying class loading error: Type org.aspectj.runtime.internal.AroundClosure from [Module "deployment.test.war:main" from Service Module Loader] not found.
WELD-000119: Not generating any bean definitions from x.y.z.GreeterAspect because of underlying class loading error: Type org.aspectj.lang.NoAspectBoundException from [Module "deployment.test.war:main" from Service Module Loader] not found.

在我收到错误后不久

WELD-001474: Class x.y.z.Greeter is on the classpath, but was ignored because a class it references was not found: org.aspectj.runtime.internal.AroundClosure from [Module "deployment.test.war:main" from Service Module Loader].

如果我做对了,它会抱怨aspectjrt.jar不在类路径中,尽管我已经检查过并且我在依赖项中得到了它(使用Maven来构建)。曾在provided范围,尝试切换到compile但一切都没有改变。

谁能帮我解决这个问题吗?

编辑:解决了最初的问题,现在是 NullPointerException

通过添加解决了最初的问题aspectjrt.jar按照 simas_ch 的建议进行 Arquillian 部署。

虽然,在执行时,我收到一个NullPointerException

public class Greeter {
    public String greet(String name) {....}
}

...

public aspect GreeterAspect {
    @Inject
    private Greeter greeter;

    private pointcut pc() : execution(* x.y.z.SomeClass.someMethod(..));

    String around() : pc() {
        log.debug("Aspect is about to say something...");
        String result = greeter.greet("Stefano");
        log.debug("Aspect said: " + result);
        return proceed();
    }
}

我可以看到第一条日志行(Aspect is about to say something...)然后我得到NullPointerException,显然Greeter尚未注入 bean。

我究竟做错了什么?或者是否有可能将 Bean 注入到各个方面?


我不熟悉 CDI,但如果它没有选择该方面作为依赖项注入的候选者,您应该手动设置它,最好是在该方面的依赖项准备就绪后立即进行设置。您可以访问某个方面(默认情况下为单方面),方法是AspectName.aspectOf().

也许是一个与此类似的启动单例 bean:

@Singleton
@Startup
public class GreeterAspectSetup {

    @Inject
    private Greeter greeter;

    @PostConstruct
    private void setupGreeterAspect() {
        GreeterAspect.aspectOf().setGreeter(greeter);
    }

}

当然,您必须将 Greeter 的 setter 添加到方面,或者更改方面中字段的可见性并直接设置它。

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

AspectJ 和 CDI 的相关文章

  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • 在Windows上安装Java 11 OpenJDK(系统路径问题)

    Java 11 最近发布了 众所周知 这个版本没有安装文件 当然 要在没有安装程序的情况下安装 Java 我将系统设置 PATH 和 JAVA HOME 设置为解压缩 Java 11 的文件夹的地址 根据对类似问题的已接受回复建议 唯一的事
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • Java8无符号算术

    据广泛报道 Java 8 具有对无符号整数的库支持 然而 似乎没有文章解释如何使用它以及有多少可能 有些函数 例如 Integer CompareUnsigned 很容易找到 并且似乎可以实现人们所期望的功能 但是 我什至无法编写一个简单的
  • java中删除字符串中的特殊字符?

    如何删除字符串中除 之外的特殊字符 现在我用 replaceAll w s 它删除了所有特殊字符 但我想保留 谁能告诉我我该怎么办 Use replaceAll w s 我所做的是将下划线和连字符添加到正则表达式中 我添加了一个 连字符之前
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • Java 页面爬行和解析之 Crawler4j 与 Jsoup

    我想获取页面的内容并提取其中的特定部分 据我所知 此类任务至少有两种解决方案 爬虫4j https github com yasserg crawler4j and Jsoup http jsoup org 它们都能够检索页面的内容并提取其
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 制作java包

    我的 Java 类组织变得有点混乱 所以我要回顾一下我在 Java 学习中跳过的东西 类路径 我无法安静地将心爱的类编译到我为它们创建的包中 这是我的文件夹层次结构 com david Greet java greeter SayHello
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • Tomcat 6找不到mysql驱动

    这里有一个类似的问题 但关于类路径 ClassNotFoundException com mysql jdbc Driver https stackoverflow com questions 1585811 classnotfoundex
  • 如何在 Maven 中显示消息

    如何在 Maven 中显示消息 在ant中 我们确实有 echo 来显示消息 但是在maven中 我该怎么做呢 您可以使用 antrun 插件
  • Windows 上的 Nifi 命令

    在我当前的项目中 我一直在Windows操作系统上使用apache nifi 我已经提取了nifi 0 7 0 bin zip文件输入C 现在 当我跑步时 bin run nifi bat as 管理员我在命令行上看到以下消息 但无法运行
  • 运行 Jar 文件时出现问题

    我已将 java 项目编译成 Jar 文件 但运行它时遇到问题 当我跑步时 java jar myJar jar 我收到以下错误 Could not find the main class myClass 类文件不在 jar 的根目录中 因
  • 将2-3-4树转换为红黑树

    我正在尝试将 2 3 4 树转换为 java 中的红黑树 但我无法弄清楚它 我将这两个基本类编写如下 以使问题简单明了 但不知道从这里到哪里去 public class TwoThreeFour
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • JAVA - 如何从扫描仪读取文件中检测到“\n”字符

    第一次海报 我在读取文本文件的扫描仪中读取返回字符时遇到问题 正在读取的文本文件如下所示 test txt start 2 0 30 30 1 1 90 30 0 test txt end 第一行 2 表示两个点 第二行 位置索引 0 xp
  • Jackson 将单个项目反序列化到列表中

    我正在尝试使用一项服务 该服务为我提供了一个带有数组字段的实体 id 23233 items name item 1 name item 2 但是 当数组包含单个项目时 将返回该项目本身 而不是包含一个元素的数组 id 43567 item

随机推荐

  • jquery droppable -> 避免多次删除同一对象

    我有一个包含不同可拖动元素的容器 并且有一些 目标 div 的列表 用户可以在其中放置可拖动元素 例子 想象一下 您有一个 标签 列表 房屋 计算机 汽车 和一些作为目标的文档列表 所有文档都是 div 的一部分 div 因此 目标是使用拖
  • 基本 wxWidgets 定时器

    作为 wxWidgets 的新手 我需要一些如何让 wxTimer 工作的示例代码 参考资料提供了 3 种使用方法 但不包含其中任何一种的示例代码 最理想的情况是 我想让方法 2 发挥作用 来自samples widgets gauge c
  • 计算PostgreSQL中批量查询影响的行数

    首先 是的 我已经阅读了 DO 语句的文档 http www postgresql org docs 9 1 static sql do html 所以我的问题是 我需要执行一些包含 UPDATE 语句的动态代码块并计算所有受影响的行数 我
  • UIImageView 中的 UIImage 大小

    我有一些UIImage并将其显示在UIImageView 我需要使用UIViewContentModeScaleAspectFit内容模式 这是简单的代码 UIImageView imageView UIImageView alloc in
  • Guice:根据谁获得它来注入不同的实现?

    我有两个第三方类 它们都实现了Authorizer界面 我需要为每个注入不同的实现 如果我做一个 Provides 我怎样才能实现它 以便它提供运行时所需的实现 提供者不知道是谁要求注射 理论上我可以使用 Named 但我无法修改正在注入的
  • C# 数组子集获取

    我有一个字节数组 我想确定这个字节数组的内容是否作为连续序列存在于另一个更大的数组中 执行此操作的最简单方法是什么 天真的方法是 public static bool IsSubsetOf byte set byte subset for
  • iPhone 应用程序需要启动画面吗?

    这是我第一次提交我的应用程序 我从文档中知道应该指定启动图像 但我创建了自己的启动视图 带有 uilabel 和 uiimageview 的视图控制器 并且效果很好 但如果我不制作发布图片 我担心不被接受 有人可以给我一些建议吗 苹果引用
  • Firefox 扩展程序不显示图标

    我已经实现了示例 mozilla firefox 扩展来在工具栏上显示 firefox 图标 操作按钮 它将打开 http www mozilla org 它在 jpm run 中工作正常 然后我使用 jpm xpi 创建了该包并创建了 x
  • 如何实现-在__del__上写入文件?

    我正在尝试对类 obj 销毁进行一些活动 如何实现文件打开 del 功能 我使用的是Python 3 4 class iam object def init self print I m born def del self f open m
  • 如何在实体框架中查找具有指定日期范围列表的日期?

    我有一个我创建的类的 IEnumerable 来包含日期范围 该类看起来像这样 public class Range
  • 如何使用 PHP 中的 API 在 facebook 上发布墙?

    我想使用 facebook API 在 facebook 墙上发布分数 确保您有 Facebook SDKhttps github com facebook php sdk 启动 Facebook API facebook new Face
  • JVector Map如何在标记悬停时获得动态图像

    嗨 我正在使用JVector Map我知道我的问题可能以前被问过 而且我也发现了这篇文章jvectormap 标记标签图像也是 但是我的问题还是没有解决 我想在工具提示中显示每个标记的图片 当鼠标悬停时它会显示该图片 这是我的代码 worl
  • 需要 Gradle 2.1 迁移到 Gradle 包装器并同步项目

    我正在尝试建立u202杰克 沃顿 Jake Wharton 的 Android 项目 我的 android studio 无法构建该项目 显示的错误如下 Gradle 2 1 is required Migrate to Gradle wr
  • mySQL 中奇怪的 Ascii 字符。需要查询才能删除

    我正在尝试找出如何从 mySQL 数据库中删除该字符 它是由其他没有做得很好的人为我转换的 表是 ps product lang 字段是描述和描述短 我认为我的查询应该是 更新 ps product lang 设置描述 替换 描述 但是我应
  • Mapbox:libc++abi.dylib:以 NSException 类型的未捕获异常终止(lldb)

    我在 Android 上工作时一直在实现 Mapbox 通过 CocoaPods 安装后在 iOS 上遇到错误 我得到了framework not found Mapbox但在以下答案之后目标覆盖 FRAMEWORK SEARCH PATH
  • R 中的直方图 - x 轴未正确居中

    我有一个列表中的直方图d我只需输入即可创建的值 hist d And this is what I get 我怎样才能使x轴一直向左延伸到该图的原点 左下角 为什么会在 0 4处截止 宏的回答是迄今为止最简单的路线 但是 如果您确实对默认行
  • 在 Xamarin.iOS 中将选项卡移动到顶部时删除底部的空白

    我需要根据 Youtube 的最新 UI 创建选项卡式菜单 并在 Android 和 iOS 上显示顶部菜单 Android 上的默认行为是在顶部显示菜单 这样就可以正常工作 在 iOS 上 我创建了一个自定义渲染 并使用以下代码将栏的位置
  • Java、C、PHP 的自动补全库?

    我正在为我的文本编辑器构建一个开源自动完成插件 因为它还没有 是否有我可以使用的自动完成库 即某种包含 Java C PHP 等常用函数的数据文件 我已经构建了插件 但我并不特别想浏览所有 Java 文档并手写插件将引用的实际库 我只是在寻
  • 如何让 Liferay 6.1.0 在找不到资源时始终重定向到 404 页面?

    我为我拥有的 Liferay 网站创建了一个简单的钩子 它包含一个覆盖默认 Liferay 404 的 404 jsp 如果我输入特定页面 它可以正常工作 例如 即将http localhost 8080 joky jsp throws 严
  • AspectJ 和 CDI

    我正在尝试找出一种将 bean 注入某个方面的方法 I mean public class Greeter public String greet String name public aspect GreeterAspect Inject