-S07: エンジンチューン

続いて、二番目のコンポーネント初期化方法である、コンストラクタ引数を利用した設定を見ていきます。

list07-1. 引数を持つコンストラクタがあるEngineCar.java
package tutorial.org.seasar.console;
public class EngineCar implements Car {
  private int engineSize;
  private boolean turbo;
  public EngineCar(int engineSize, boolean turbo) {
    this.engineSize = engineSize;
    this.turbo = turbo;
  }
  public void run() {
    System.out.println("Engine size is " + engineSize +
      "cc, " + "turbo is " + turbo);
  }
}

list07-1のEngineCarクラスは、int型とboolean型二つの引数をとるコンストラクタがあります。

list07-2. コンストラクタに引数を渡すcar.xml修正版
<?xml version="1.0" encoding="UTF-8"?>
<components>
  <component class="tutorial.org.seasar.console.EngineCar">
    <arg>3000</arg>
    <arg>true</arg>
  </component>
</components>

<component>エレメントの子要素として、<arg>エレメントをコンストラクタの引数の数だけ追加します。各<arg>エレメントボディにSelで引数設定値を記述します。list07-2の例では、int型として"3000"、boolean型として"true"を設定しています。Selでのint型、boolean型は先のString型の場合にシングルクォートで囲ったのとは異なり、エレメントボディにシングルクォートの囲いなしで記述します。Selのほうで値をチェックして型を内部で自動的に決定してくれています。<arg>エレメントの出現順に応じてコンストラクタにセットされますので、先に出現した"3000"が一番目の引数、次に出現した"true"が二番目の引数となり、正しくコンストラクタが呼べるのです。
結果は、

Engine size is 3000cc, turbo is true

となりました。