是否可以使用 Guice 注入请求注入的类



我希望对象的注入实例知道请求注入的类的名称。我知道这违反了依赖注入的整个概念,但它似乎是支持有用日志记录的有效用例。这在吉斯可能吗?

例:

class InjectorAware {
   @Inject
   public InjectorAware(Class injectorClass){
      System.out.println("I was injected into a "+injectorClass.getCanonicalName());
   }
}
class NeedsInjectorAwareField {
   @Inject InjectorAware injectorAware;
}

当 NeedsInjectorAwareField 被注入时,控制台会打印"我被注入到某个包中。需要注入器感知字段">

Guice 实际上已经为您注入了一个java.util.logging.Logger,该已经使用它注入的类的名称进行了自定义。 不知道它是如何完成的,但你也许可以借用从 Guice 源中使用的技术......或者直接使用记录器。

更新:这似乎是负责此行为的Guice源的重点。 你也许可以以某种方式借用这项技术,我不确定。

仅使用 Guice 是不可能的,他们不允许这样做。

http://code.google.com/p/google-guice/issues/detail?id=27

不确定您是否只能使用 Guice 来做到这一点,但通过注入的构造函数使其工作并不难。

public interface InjectorAware {
  void setInjector(Object injectingInstance);
}
public class Foo {
  @Injected
  public Foo(InjectorAware injectorAware){
    injectorAware.setInjector(this);
  }
}

可是。不确定这是个好主意。

我知道

这是一个古老的线程,但对于那些仍在尝试解决这个问题的人,请查看 https://github.com/raner/loginject

最新更新