内置绑定(Built-in Bindings)
Built-in Bindings
除了显示绑定和just-in-time绑定外,还有一些额外的绑定会自动包含进Guice的注入器中。只有Guice的注入器自己可以创建这些绑定,如果尝试自行绑定会报错。
Loggers
Guice内置了java.uti.logging.Logger
的绑定,这可以节省一些重复性的工作。这个绑定会自动将logger的名字设置为它被注入的类的名字。
@Singleton
public class ConsoleTransactionLog implements TransactionLog {
private final Logger logger;
@Inject
public ConsoleTransactionLog(Logger logger) {
this.logger = logger;
}
public void logConnectException(UnreachableException e) {
/* the message is logged to the "ConsoleTransacitonLog" logger */
logger.warning("Connect exception failed, " + e.getMessage());
}
The Injector
在框架性的代码中,有时需要到运行时才能知道需要什么类型。在这种不常见的场景中,需要注入注入器本身。注入注入器本身的代码对于自己的依赖不是自说明的1,因此应该尽量少使用。
Providers
对于任何Guice知道的类型,都可以注入这个类型的Provider。注入Providers的细节请参考这里。
TypeLiterals
Guice对于它注入的类型保存有完整的类型信息,如果你注入的是参数化类型,你可以采用TypeLiterial<T>
来表明元素的具体类型。
Stage
Guice支持一个stagem枚举,可以用于区分开发环境和生产环境。
Members Injectors(?)
当绑定providers或编写它的扩展时,你可能希望Guice能够将依赖注入到你自己构造的对象中。为了达到这个目的,可以添加一个MembersInjector<T>
的依赖(其中T是你自己构造对象的类型),然后调用membersInject.injectMembers(myNewObject)
。
1. Code that injects the injector does not self-document its dependencies. ↩