我有一个父子类层次结构。
public class Parent{
@Transactional
public abstract void childMethod();
public void doProcess(){
//.. Some common tasks
App.getInjector().injectMembers(this);
// Now calling the overriden method;
// But Transaction interceptor is not working .. Why ??
childMethod();
}
}
public class Child extends Parent {
public void childMethod(){
// some work here
}
}
public class App {
public static void main(String[] args){
Child child = new Child();
child.doProcess();
}
}
问题是我在这里缺少什么。拦截器不适用于injectMember(this)??
我知道,我可以为子项创建单独的类,然后从App.getInjector()。getInstance(Child.class)创建它的实例,而不是父子,这将起作用..但我不想那样做。
那么有人可以帮我解决我在这里做错了什么吗?提前致谢。
答案 0 :(得分:0)
正如@DanielBickler在评论中指出的那样,只有当Guice本身创建实例时,Guice中的Interceptor才有效。
来自Google guice文档:Guice AOP Documentation
正如文档中所提到的,guice创建了子类,并覆盖了使拦截器工作的方法。 在问题中显示的示例中,实际实例不是由juice创建的,因此injectMembers(this)方法将仅为字段注入用@Inject标记的实例,不会进行任何字节码增强以使拦截器工作。