Field Injection
EJB3のサポートに伴い、Seasar2でField Injectionをサポートします。使い方は、EJB3と同じでこんな感じ。
@EJB
private Foo foo;
この場合は、次の順序で対象となるコンポーネントを決定します。
- フィールド名(foo)と同じ名前のコンポーネントがコンテナに登録されていて、型Fooに代入可能なら、そのコンポーネントを設定。
- 型Fooを実装したコンポーネントがコンテナに1つしか登録されていなければ、そのコンポーネントを設定。
- 上記以外は例外。
@EJB(name="xxx")のように名前を指定した場合には、フィールド名の変わりに指定した名前が使われます。@Resourceも@EJBと同様です。
Field Injectionをdiconファイルで書く場合ですが、propertyタグをそのまま流用しようと思います。フィールド名とプロパティ名をあわせておけば、Kijimunaもそのまま使えるからです。(そのうち対応してね。 -> 松田さん)
Injectionするときのロジックは、プロパティ名と同じ名前のフィールドがあれば、Field Injectionそうでなければ、これまでと同様Setter Injectionをするようにします。
パラメータ情報を@Resourceを使って、設定するには、次のようにします。まず、フィールドを用意します。
@Resource
private int max;
次にdiconファイルで値を設定します。
<property name="max">10</property>