我正在尝试找出一种将 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 注入到各个方面?