レベルエンター山本大のブログ

面白いプログラミング教育を若い人たちに

BLOCKVROCKリファレンス目次はこちら

Guice2.0 beta 紹介記事の翻訳(7)

原文:IBM Developer : Sorry, that page no longer exists
訳1:Guice2.0 beta 紹介記事の翻訳(1) - 山本大の日記
訳2:Guice2.0 beta 紹介記事の翻訳(2) - 山本大の日記
訳3:Guice2.0 beta 紹介記事の翻訳(3) - 山本大の日記
訳4:Guice2.0 beta 紹介記事の翻訳(4) - 山本大の日記
訳5:Guice2.0 beta 紹介記事の翻訳(5) - 山本大の日記
訳6:Guice2.0 beta 紹介記事の翻訳(6) - 山本大の日記

定数バインディングとモジュールコンフィグレーション(Constant binding and module configuration)

The HeavyWaterRefinery requires a license key to start. It turns out that Guice can bind constant values as well as new instances. Check out Listing 21:


重水精製所が起動するためにライセンスキーを必要とするとします。
Guiceが新しいインスタンスに対して定数値をバインドすることで対処できます。
リスト21をみてください。


リスト21.定数をモジュールにバインドする(Binding a constant value in a module)

public class HeavyWaterRefinery implements FuelSource {
  @Inject
  public HeavyWaterRefinery(@Named("LicenseKey") String key) {...}
}

// in HeroModule:
binder.bind(String.class)
  .annotatedWith(Names.named("LicenseKey")).toInstance("QWERTY");


The binding annotation is necessary here because otherwise, Guice couldn't tell different Strings apart.
Note that I chose to use the @Named annotation despite recommending against it earlier. That's because I want to show off the code in Listing 22:

バインディングアノテーションをこの場所に設定することが必要です。
さもなければ、Guiceは異なった文字列を分離出来なくなるからです。
そう推奨しているにもかかわらず、@Namedアノテーションを選んでいることに注目してください。
ここでやりたかったことをリスト22でお見せします。


リスト22. プロパティーファイルを使ってモジュールを構築する(Configuring a module using a properties file)

//In HeroModule:
private void loadProperties(Binder binder) {
  InputStream stream =
    HeroModule.class.getResourceAsStream("/app.properties");
  Properties appProperties = new Properties();
  try {
    appProperties.load(stream);
    Names.bindProperties(binder, appProperties);
  } catch (IOException e) {
    // This is the preferred way to tell Guice something went wrong
    binder.addError(e);
  }
}

//In the file app.properties:
LicenseKey=QWERTY1234

This code uses the Guice Names.bindProperties utility function to bind every property in the app.properties file to a constant with the right @Named annotation. This is cool in itself, and it also shows how you can make module code arbitrarily complex. If you like, you can load binding information from a database or XML file. Modules are plain Java code, and that gives you a lot of flexibility.


このコードは、app.propertiesというファイルのすべてのプロパティーをバインドするために、
GuiceのNames.bindPropertieというユーティリティー機能を使っています。
これにより@Namedアノテーションに一致する定数の設定をバインドすることができます。
これはとてもクールな方法だと思います。そして、ここから色々な方法によるモジュールコードの作り方ができるということもあらわしています。
もし望むなら、バインディング情報をデータベースやXMLファイルから読み込むこともできます。
モジュールはシンプルなJavaコードであり、多くの柔軟性を与えてくれます。