我想要一个对象的注入实例来知道请求注入的类的名称。我知道这种违反了依赖注入的整个概念,但它似乎是支持有用日志记录的有效用例。这对Guice来说可能吗?
示例:
class InjectorAware {
@Inject
public InjectorAware(Class injectorClass){
System.out.println("I was injected into a "+injectorClass.getCanonicalName());
}
}
class NeedsInjectorAwareField {
@Inject InjectorAware injectorAware;
}
当NeedsInjectorAwareField被注入时,控制台将打印“我被注入somepackage.NeedsInjectorAwareField”
答案 0 :(得分:4)
Guice实际上已经为你injects java.util.logging.Logger
已经定制了它所注入的类的名称。不确定它是如何完成的,但你可以借用Guice源中使用的技术......或者直接使用Logger。
更新:this似乎是负责此行为的Guice来源。你可能会以某种方式借用这种技术,我不确定。
答案 1 :(得分:2)
仅使用Guice是不可能的,他们不会允许它。
答案 2 :(得分:1)
不确定你是否只能使用Guice,但通过注入的构造函数使它工作并不会太难。
public interface InjectorAware {
void setInjector(Object injectingInstance);
}
public class Foo {
@Injected
public Foo(InjectorAware injectorAware){
injectorAware.setInjector(this);
}
}
那就是说。不确定这是个好主意。
答案 3 :(得分:1)
我知道这是一个旧线程,但对于那些仍在尝试解决此问题的人,请查看https://github.com/raner/loginject