さて、こうして定義したコンポーネントは、必ずどこかの「スコープ」に属することになる。Web Beansでは、現在のところ以下のようなスコープがデフォルトで用意される予定だ。
- リクエストスコープ (RequestScoped)
- セッションスコープ (SessionScoped)
- アプリケーションスコープ (ApplicationScoped)
- カンバセーション (Conversation) スコープ (ConversationScoped)
- 従属 (Dependent) スコープ (Dependent)
最初の3つは、サーブレットプログラミングをご存じの方であればお馴染であろう。
カンバセーションスコープについての説明は後述する。
従属スコープは特殊なスコープで、「インジェクトした先のコンポーネントが属するスコープ」と同じになる。
こうしたスコープは、やはりコンポーネントに対してアノテーションで指定する。 リスト10は、先のGreetingPrinterクラスをアプリケーションスコープに格納するよう指定している。
リスト10
@Component
<strong>@ApplicationScoped</strong>
public class GreetingPrinter {
...(略)...
}
では、これまでのようにスコープを指定しない場合はどうなるのだろうか。仕様書によれば、それに関してはまだ検討中だとのことだが、@RequestScopedか@Dependentのどちらかになる可能性が高い。