Dependency injection GoogleGuice的内置绑定是如何工作的?

Dependency injection GoogleGuice的内置绑定是如何工作的?,dependency-injection,inversion-of-control,guice,binding,Dependency Injection,Inversion Of Control,Guice,Binding,我第一次尝试Google Guice,发现它很不错。 但是,当我到达的部分,我不明白的例子 对我来说,它看起来可以像拦截器一样用于日志记录,但我不知道如何使用它 你们中有人能解释一下这种类型的装订,以及我如何使用它吗?并且可能(如果可能的话)将其用于日志记录?您所指的所有示例显示的是,您不必在代码(如示例)中为Logger.class提供绑定。因为99%的情况是 Logger logger = Logger.getLogger(ConsoleTransactionLog.class); Gui

我第一次尝试Google Guice,发现它很不错。 但是,当我到达的部分,我不明白的例子

对我来说,它看起来可以像拦截器一样用于日志记录,但我不知道如何使用它


你们中有人能解释一下这种类型的装订,以及我如何使用它吗?并且可能(如果可能的话)将其用于日志记录?

您所指的所有示例显示的是,您不必在代码(如示例)中为Logger.class提供绑定。因为99%的情况是

Logger logger = Logger.getLogger(ConsoleTransactionLog.class);

Guice将为您提供该记录器作为一种方便。如果您需要不同的记录器(即,一个不基于被注入的类的记录器),您可以提供自己的绑定。

文档表明,
绑定(Logger.class).to(…)
调用已经为您完成。因此,您不需要调用bind方法。相反,您可以直接注入它,就好像您已经调用了bind:

class DoSomething {
    private final Logger logger;
    @Inject public DoSomething(Logger logger) {
        this.logger = logger;
    }
}
或者,您可以从喷油器获取:

/* even without specifying modules, logger is present */
Injector injector = Guice.createInjector();
Logger logger = injector.getInstance(Logger.class);

如果需要覆盖记录器,则必须覆盖。

这可能有点愚蠢,但我可以问一下如何使用此变体吗?我只知道它是这样的(有一个工厂):private static final Log=LogFactory.getLog(FrontLayer.class);然后将其与LOG.debug(“bla”)一起使用;我不知道你在用哪个日志软件包。Guice支持对java.util.logging.Logger的“内置”支持如果您使用的是不同的日志包,则需要提供自己的绑定或以某种方式扩展Guice。我通常将Apache Commons日志与log4j结合使用。谢谢!这就是我想知道的。