Seam APIによるComponentの手動アクセス

2日続けてSeamネタです。(ネタといっても今回は昔調べた技術情報のメモですが・・・)

今回はコンポーネントへの手動アクセス。Seamを利用する際に一般的にはクラスの取得などは@Inアノテーションを使って自動的にインジェクションするのが一般的ですが、手動でのアクセスも可能のようです。

やりかたは簡単。例えばHogeServiceと言うコンポーネントがあり、名前が”hogeService”だった場合、

Component,getInstance("hogeService")

クラスから取得する場合は、

Component,getInstance(HogeService.class)

この場合はいずれもインスタンスを生成するわけですが、インスタンスの生成自体を制御する引数を持ったメソッドもあります。(詳しくはJavaDoc参照)

これとは別にSeamのコンテキストからコンポーネントを取得することもできみたい。

Contexts.getConversationContext().get("hogeService");

この場合はConvasationコンテキスト内にあるhogeServiceという名のコンポーネントを取得します。(他にもgetEventContext()、といったメソッドがあります。)

ComponentとContextsの違いはコンポーネントを生成するか否か(new or get)というところです。

ちなみにContextsクラス自体はスレッドローカルみたい。