S-JIS[2024-03-10] 変更履歴

JAX-RS ApplicationScoped

JAX-RSのApplicationScopedアノテーションのメモ。


概要

アプリケーション全体でひとつのインスタンスだけが共有されるオブジェクト(アプリケーション終了時に破棄されるオブジェクト)はApplicationScopedで作成できる。

ApplicationScopedを使うには、build.gradleのdependenciesに以下のライブラリーを指定する。

dependencies {
    compileOnly 'jakarta.ws.rs:jakarta.ws.rs-api:3.1.0'
    compileOnly 'jakarta.enterprise:jakarta.enterprise.cdi-api:4.0.1'
}

import jakarta.annotation.PostConstruct;
import jakarta.annotation.PreDestroy;
import jakarta.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class MyApplicationResource {

    @PostConstruct
    void construct() {
        // フィールドの初期化
    }

    public void 操作() {
        〜
    }

    @PreDestroy
    void destroy() {
        // フィールドのオブジェクトのクローズ
    }
}

クラスにApplicationScopedアノテーションを付ける。

このクラスでは、引数を持つコンストラクターを定義できないようだ。(コンストラクターインジェクションが出来ない)

必要に応じて、生成時に呼ばれるPostConstructや終了時に呼ばれるPreDestroyのメソッドを実装する。
なお、これらのメソッドではIOException等のチェック例外をスローすることは出来ないようだ。(throwsを宣言するとデプロイ時にエラーになる)


使う側の例

ApplicationScopedのオブジェクトを使う側は、インジェクトする。

import jakarta.inject.Inject;
@Path("/resource3")
public class Resource3 {

    @Inject
    private MyApplicationResource myResource;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {

        myResource.操作();

        return 〜;
    }
}

JAX-RSへ戻る / Java目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま