さて、こうして定義したコンポーネントは、必ずどこかの「スコープ」に属することになる。Web Beansでは、現在のところ以下のようなスコープがデフォルトで用意される予定だ。

  1. リクエストスコープ (RequestScoped)
  2. セッションスコープ (SessionScoped)
  3. アプリケーションスコープ (ApplicationScoped)
  4. カンバセーション (Conversation) スコープ (ConversationScoped)
  5. 従属 (Dependent) スコープ (Dependent)

最初の3つは、サーブレットプログラミングをご存じの方であればお馴染であろう。

カンバセーションスコープについての説明は後述する。

従属スコープは特殊なスコープで、「インジェクトした先のコンポーネントが属するスコープ」と同じになる。

こうしたスコープは、やはりコンポーネントに対してアノテーションで指定する。 リスト10は、先のGreetingPrinterクラスをアプリケーションスコープに格納するよう指定している。

リスト10

    @Component
    <strong>@ApplicationScoped</strong>
    public class GreetingPrinter {

      ...(略)...
    }

では、これまでのようにスコープを指定しない場合はどうなるのだろうか。仕様書によれば、それに関してはまだ検討中だとのことだが、@RequestScopedか@Dependentのどちらかになる可能性が高い。