我有一个简单的aspect
,它应该设置类fied的值,它有注释@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
课程看起来像这样
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();
}
答案 0 :(得分:1)
请尝试将切入点语法重新定义为
Object around(): get(@package.subpackage.GuiceInject * *.*)
正确的字段签名必须指定字段的类型,声明类型和名称。如果您的注释位于不同的包中,则应该完全限定。