2009-12-20 48 views
1

我第一次试用Google Guice,觉得它非常好。 但是,当我到达Built-in Bindings的一部分时,我不理解这些例子。Google Guice的内置绑定如何工作?

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

你们有人可以解释这种类型的绑定和我如何使用它?也许(如果可能的话)使用它进行日志记录?

回答

2

本文档指出的是bind(Logger.class).to(...)调用已经为您完成。因此,你不需要调用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

+0

谢谢!那就是我想知道的。 – lony 2010-01-15 19:49:15

1

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

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

吉斯将提供记录器为您的方便。如果您需要一个不同的记录器(即,不是基于正在注入的类),您可以提供自己的绑定。

+0

也许它有点愚蠢,但我可以问你我是如何使用这个变种?我只知道它是这样的(带工厂): private static final Log LOG = LogFactory.getLog(FrontLayer.class); 而不是与 一起使用LOG.debug(“bla”); – lony 2009-12-21 20:22:28

+0

我不知道你正在使用哪个Logging软件包。 Guice支持java.util.logging.Logger的“内置”支持。 如果您使用的是不同的日志记录软件包,您需要提供自己的绑定或以某种方式扩展Guice。 – 2009-12-22 04:26:15

+0

我正常使用Apache Commons Log4与log4j结合使用。 – lony 2009-12-22 12:17:30