未调用方面
aspect is not invoked
我有一个简单的 aspect
应该设置 class 字段的值,它有注释 @GuiceInject
。
原来我有这个
@GuiceInject(module=RepositoryModule.class)
private IRacesRepository repository;
我希望得到类似的结果
private IRacesRepository repository = GuiceInject.getInstance(IRacesRepository.class);
这是我的方面
public aspect InjectionAspect {
Object around(): get(@GuiceInject * *) {
System.out.println(thisJoinPointStaticPart);
// instantiate object as it supposed to be null originally
return GuiceInjector.getInstance(thisJoinPoint.getTarget().getClass());
}
}
据我所知 - 我是 AOP 的新手 - 它应该用方面的代码替换 get
字段的调用。
它编译得很好,但是当我 运行 应用程序时 - 没有任何反应。我得到 NullPointerException
的 readRaces
方法,因为它保持 null
所以 aspect
没有工作。
我的main
class看起来像这样
public class Example {
@GuiceInject(module=RepositoryModule.class)
private IRacesRepository racesRepository;
private void execute() {
System.out.println("List of races: " + racesRepository.readRaces());
}
public static void main(String[] args) {
new Example().execute();
}
}
有什么问题?注释有这个定义
@Target(ElementType.FIELD)
// make annotation visible in runtime for AspectJ
@Retention(RetentionPolicy.RUNTIME)
public @interface GuiceInject {
Class<? extends AbstractModule> module();
}
请尝试将切入点语法重新定义为
Object around(): get(@package.subpackage.GuiceInject * *.*)
正确的字段签名必须指定字段类型、声明类型和名称。如果您的注释在不同的包中,它应该是完全限定的。
我有一个简单的 aspect
应该设置 class 字段的值,它有注释 @GuiceInject
。
原来我有这个
@GuiceInject(module=RepositoryModule.class)
private IRacesRepository repository;
我希望得到类似的结果
private IRacesRepository repository = GuiceInject.getInstance(IRacesRepository.class);
这是我的方面
public aspect InjectionAspect {
Object around(): get(@GuiceInject * *) {
System.out.println(thisJoinPointStaticPart);
// instantiate object as it supposed to be null originally
return GuiceInjector.getInstance(thisJoinPoint.getTarget().getClass());
}
}
据我所知 - 我是 AOP 的新手 - 它应该用方面的代码替换 get
字段的调用。
它编译得很好,但是当我 运行 应用程序时 - 没有任何反应。我得到 NullPointerException
的 readRaces
方法,因为它保持 null
所以 aspect
没有工作。
我的main
class看起来像这样
public class Example {
@GuiceInject(module=RepositoryModule.class)
private IRacesRepository racesRepository;
private void execute() {
System.out.println("List of races: " + racesRepository.readRaces());
}
public static void main(String[] args) {
new Example().execute();
}
}
有什么问题?注释有这个定义
@Target(ElementType.FIELD)
// make annotation visible in runtime for AspectJ
@Retention(RetentionPolicy.RUNTIME)
public @interface GuiceInject {
Class<? extends AbstractModule> module();
}
请尝试将切入点语法重新定义为
Object around(): get(@package.subpackage.GuiceInject * *.*)
正确的字段签名必须指定字段类型、声明类型和名称。如果您的注释在不同的包中,它应该是完全限定的。