ビルトインバインディング
明示的あるいはその場のバインディングに加え、インジェクタは自動的にバインディングを付加する。 インジェクタのみがこれらのバインディングを使用可能なため、コードからこれを実行しようとするとエラーになる。
ロガー
Guiceはjava.util.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()); }
インジェクタ
フレームワークコードでは、実行時になるまでそのような型が必要になるのかわからない場合がある。 このような稀なケースでは、インジェクタ自体を注入すべきである。 インジェクタを注入するコードでは、(コード上では)何に依存しているのかわからないため、このようなアプローチは控えめにすべきである。
タイプリテラル
Guiceは注入するすべてについて、完全なタイプ情報を持っている。 パラメトライズタイプを注入する場合には、TypeLiteral<T>を使って、注入タイプを決めることができる。
ステージ
Guiceはstage enumを使って、開発フェーズと製品フェーズを区別する。