- はじめに
- jakarta.annotation.Nonnull / Nullable の追加
- jakarta.annotation.Priority アノテーション適用範囲の拡大
- その他の変更の無いアノテーション
はじめに
Jakarta Annotations (旧 Common Annotations) は、他の仕様で使用可能な共通のアノテーションの小さなセットを定義しています。
これにより、他のJakarta EE仕様で独自定義されたアノテーションの冗長性や重複を回避することで、プラットフォーム間で使用するアノテーションに一貫性をもたせるものとなります。
Jakarta Annotations 2.1 では、いよいよ @Nonnull
@Nullable
が追加されました。それと @Priority
の定義変更が含まれます。
以下に見ていきましょう。
jakarta.annotation.Nonnull / Nullable の追加
Nonnull アノテーションはnull になり得ない要素をマークするために使用されます。 Nullable アノテーションは、null になる可能性のある要素をマークするために使用されます。
これらのマーカーアノテーションは、IDEや静的解析ツール、およびランタイム検証で使用されることを想定しています。
Jakarta Annotations 仕様では、以下の動作を定義しています。
- メソッド - 戻り値の型は null であってはならない / null の可能性がある
- パラメータ - パラメータは null であってはならない / null の可能性がある
- フィールド - オブジェクトの構築完了後、フィールドを null にできない / null の可能性がある
public interface StockQuoteService { @Nonnull BigDecimal quote( @Nonnull String marker, @Nullable BigDecimal defaultValue); }
jakarta.annotation.Priority アノテーション適用範囲の拡大
Priority
アノテーションは、プログラム要素に適用して、それらがどのような順序で使用されるべきかを指定するものです。
Priority
アノテーションを特定のインスタンスで使用した場合の効果は、特定のクラスの使用を定義する他の仕様によって定義されます。
jakarta.annotation.Priority アノテーションは、今まで @Target({TYPE, PARAMETER})
とマークされており、型とパラメータにのみ適用可能となっており、プロデューサーメソッド/フィールドへの付与ができませんでした。
旧来は以下のような定義だったものが、
@Target({TYPE, PARAMETER}) @Retention(RUNTIME) @Documented public @interface Priority { int value(); }
以下のように変更されました。
@Retention(RUNTIME) @Documented public @interface Priority { int value(); }
@Target
メタ注釈が存在しないため、型パラメータ宣言を除く任意の宣言の修飾子として記述できるようになりました。
CDI 4.0 の変更点で、ステレオタイプに @Priority で優先度指定が可能となったこととも関連しています。
その他の変更の無いアノテーション
以下のアノテーションについては旧来から変更はありません。
- jakarta.annotation.Generated
生成されたソースコードをマークするために使用
jakarta.annotation.Resource / Resources
アプリケーションの初期化時に、コンテナが要求されたリソースのインスタンスをアプリケーションに注入
jakarta.annotation.PostConstruct / PreDestroy
- PostConstruct アノテーションは、依存性注入が行われた後に実行される必要があるメソッドで使用
- PreDestroy アノテーションは、インスタンスがコンテナから削除される過程にあることを知らせるコールバック通知として使用メソッドで使用
jakarta.annotation.security.RunAs
- Jakarta EE コンテナでの実行中のアプリケーションのセキュリティロールを定義
- 特定のロールの下でアプリケーションを実行することが可能
jakarta.annotation.security.RolesAllowed
- アプリケーションのメソッドにアクセスすることを許可されたセキュリティロールを指定
jakarta.annotation.security.PermitAll
- すべてのセキュリティ・ロールが指定されたメソッドの呼び出しを許可されることを指定
jakarta.annotation.security.DenyAll
- どのセキュリティ・ロールも指定されたメソッドを呼び出すことができないことを指定
jakarta.annotation.security.DeclareRoles
- アプリケーションで使用されるセキュリティロールを指定する
jakarta.annotation.sql.DataSourceDefinition / DataSourceDefinitions
- JNDI に登録されるコンテナ DataSource を定義
jakarta.annotation.ManagedBean
- Jakarta Managed Bean を宣言するために使用される。
- リソースインジェクション、ライフサイクルコールバック、インターセプターなどの基本サービスの小さなセットをサポートするコンテナ管理オブジェクト