Google Guice的内置绑定如何工作?

时间:2009-12-20 22:51:32

标签: dependency-injection inversion-of-control guice binding

我第一次尝试使用Google Guice并发现它非常好。 但是,当我到达Built-in Bindings的部分时,我不明白这些例子。

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

有人可以解释这种类型的绑定以及如何使用它吗?也许(如果可能的话)用它来记录?

2 个答案:

答案 0 :(得分:2)

文档表明已经为您进行了bind(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);

如果您需要覆盖记录器,则必须use this method

答案 1 :(得分:1)

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

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

为方便起见,Guice会为您提供该记录器。如果您需要不同的记录器(即,不是基于注入的类的记录器),您可以提供自己的绑定。