Guice显式绑定不匹配

时间:2019-01-03 22:50:06

标签: classloader guice

我对Guice不使用Guice模块中定义的显式绑定有一个奇怪的问题。这是接口到类的简单映射。

我已通过调试器对其进行了跟踪,并且可以在InjectorImpl.findBindingsByType()中看到绑定MultiMap确实包含有问题的绑定。但是,它返回null,然后抛出一个异常,即没有实现绑定(请参见下文)。绑定类型是一个接口,因此很明显,如果不使用绑定,就无法创建它。

1) No implementation for org.example.module.approval.ApprovalController was bound.
  Did you mean?
    org.example.module.approval.ApprovalController bound  at org.example.module.ApBaseModule.configure(ApBaseModule.kt:88)

    org.example.module.approval.ApprovalControllerImpl bound  at org.example.module.approval.ApprovalControllerImpl.class(Unknown Source)

  while locating org.example.module.approval.ApprovalController
    for the 1st parameter of org.example.module.invoices.delegates.BeginApprovalDelegate.<init>(Unknown Source)
  while locating org.example.module.invoices.delegates.BeginApprovalDelegate

我尝试使用调试器中的“执行表达式”工具在TypeLiteral及其应匹配的MultiMap条目上调用equals方法。这确实返回false。但是我不知道为什么。有趣的是,如果我在每个方法上调用toString并测试其相等性,则返回true。

我发现的JavaDocs没有指定Type Literal的相等条件,并且我努力遵循Guice源代码中的逻辑。除了该类的圆锥形名称,它还在测试什么?类加载器会进入其中吗?

我问的原因是,受影响的类存储在单独的“插件” jar中,我的应用在启动时会通过Child Class Loader对其进行加载。因此,对于大多数应用程序而言,它是不同的类加载器。

任何关于下一步寻找的建议将不胜感激。

0 个答案:

没有答案