【发布时间】:2016-05-18 08:13:00
【问题描述】:
我在我的 Java 程序中有一个使用注解 @Aspect 的 AspectJ 类,我想使用 @Inject 向接口类注入一个类构造函数,但它给了我 NoAspectBoundException 错误,如下所示:
de.hpi.cloudraid.exception.InternalClientError: org.aspectj.lang.NoAspectBoundException: Exception while initializing de.hpi.cloudraid.service.MeasurementAspect: java.lang.NoSuchMethodError: de.hpi.cloudraid.service.MeasurementAspect: method <init>()V not found
这是我班的sn-p:
@Aspect
public class MeasurementAspect {
private final RemoteStatisticService remoteStatisticService;
@Inject
public MeasurementAspect(RemoteStatisticService remoteStatisticService) {
this.remoteStatisticService = remoteStatisticService;
}
....
}
我尝试使用像 private @Inject RemoteStatisticService remoteStatisticService 这样的普通注入;但它给了我 NullPointerException 的错误。
感谢任何帮助。谢谢
【问题讨论】:
-
你需要一个无参数的构造函数。依赖注入在方面不起作用,您需要在应用启动时手动注入。有关类似问题,请参阅我的 answer。这不是公认的答案,但我认为它比使用类型间声明的公认答案更简单,并且要求也必须管理建议的 bean,这不是我的答案中的要求。
-
@NándorElődFekete 感谢您的建议,但在本例中为 GreeterAspect.aspectOf().setGreeter(greeter);在我的情况下实现无法想到类似的解决方案,因为我正在注入接口类,我相信不可能制作接口类的 getter 和 setter。此外,我的包中不存在 aspectOf() 方法,可能是因为我使用的是注释而不是方面类的纯 AspectJ 实现? CMIIW
-
@NándorElődFekete 我实际上想过使用“第三方”类,而不是将接口注入到方面,我会将接口注入到此类中,但仍然出现 NullPointerException 错误。也许你可以帮忙调查一下here 谢谢
-
你可以为接口做setter和getter,没关系,只是一个类型。我错过了你说它是 AspectJ 注释样式的部分,所以我会在这里提供一个快速的答案。
标签: java maven dependency-injection aspectj