Java 当拦截器没有默认构造函数时,如何在GoogleGuice中绑定拦截器?

Java 当拦截器没有默认构造函数时,如何在GoogleGuice中绑定拦截器?,java,java-8,guice,Java,Java 8,Guice,我有以下Guice模块: 公共类GuiceModule{ @凌驾 受保护的void configure(){} @提供 ClassA ClassA(){ 返回新的ClassA(); } @提供 ClassB ClassB(ClassA ClassA){ ClassB ClassB=新的ClassB(classA); classB.configure(123) b类修改(456); } @提供 ClassC ClassC(ClassB ClassB){ 返回新的ClassC(classB); }

我有以下Guice模块:

公共类GuiceModule{
@凌驾
受保护的void configure(){}
@提供
ClassA ClassA(){
返回新的ClassA();
}
@提供
ClassB ClassB(ClassA ClassA){
ClassB ClassB=新的ClassB(classA);
classB.configure(123)
b类修改(456);
}
@提供
ClassC ClassC(ClassB ClassB){
返回新的ClassC(classB);
}
}
我需要添加以下
bindInterceptor

bindInterceptor(
inSubpackage(“my.sub.package”),
annotatedWith(MyAnnotation.class),
c类);
根据的第140行,我只能从
configure()
方法调用
bindInterceptor

除了不使用
@提供的
方法,而是在
配置
方法中执行所有操作之外,我还有什么其他选项

注意:我没有ClassA、ClassB或ClassC。它们都来自第三方软件包。

看起来你想这样做

您必须以稍微不同的方式编写注入器,而不是使用构造函数注入器

class ClassC {
  @Inject
  ClassB classB;                                         // Write all dependencies like this.
  @Inject
  void setClassB(ClassB classB) { this.classB = classB } // Or like this

  ClassC() { } // Write any constructor that you can actually instanciate manually
}
然后在
配置方法中:

ClassC classC = new ClassC();
requestInjection(classC);
bindInterceptor(inSubpackage("foo"), annotatedWith(Bar.class), classC);

由于您没有访问拦截器代码的权限,请编写自己的代码来封装所需的代码:

class MyInterceptor implements MethodInterceptor {
  ClassC delegate;
  
  @Inject
  void inject(ClassB classB) { // If more dependencies are required, you can add them as parameter here, it'll just work. Don't add a setter per dependency.
    delegate = new ClassC(classB);
  }
  
  @Override
  public Object invoke(MethodInvocation invocation) throws Throwable {
    return delegate.invoke(invocation);
  }
}
现在在配置方法中使用
MyInterceptor
而不是
ClassC

MyInterceptor interceptor = new MyInterceptor();
requestInjection(interceptor);
bindInterceptor(inSubpackage("foo"), annotatedWith(Bar.class), interceptor);

嗨,这看起来是个很好的答案。不幸的是,我忘了提到我没有任何类,所以我不能修改它们的构造函数。@David我更新了我的答案,记住了你的评论。