如果在当前对象中注入依赖项,则Guice Interceptor无法正常工作

时间:2017-08-23 16:53:41

标签: hibernate guice

我有一个父子类层次结构。

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)创建它的实例,而不是父子,这将起作用..但我不想那样做。

那么有人可以帮我解决我在这里做错了什么吗?提前致谢。

1 个答案:

答案 0 :(得分:0)

正如@DanielBickler在评论中指出的那样,只有当Guice本身创建实例时,Guice中的Interceptor才有效。

来自Google guice文档:Guice AOP Documentation

  • 实例必须由Guice通过@Inject-annotated或创建 无参数构造函数不可能使用方法拦截 在非Guice构建的实例上。

正如文档中所提到的,guice创建了子类,并覆盖了使拦截器工作的方法。 在问题中显示的示例中,实际实例不是由juice创建的,因此injectMembers(this)方法将仅为字段注入用@Inject标记的实例,不会进行任何字节码增强以使拦截器工作。