- 作者: 井上誠一郎,槙俊明,上妻宜人,菊田洋一
- 出版社/メーカー: 技術評論社
- 発売日: 2016/07/26
- メディア: 大型本
- この商品を含むブログ (1件) を見る
- DIの使い所
- @Typed でインジェクトポイントに利用可能な型を絞り込む事が可能
- インターフェースの実装クラスが複数ある場合は、@Qualifier を使用する
- @Qualifier を使用した独自のアノテーションを作成する
- アノテーション要素付き限定子
- @Nonbinding
- @Named を限定子として利用するのは非推奨あくまでもView側EL式参照のため
- デフォルトでクラス名の先頭を小文字にした名前がBean名になる
- プロデューサメソッドに付与する @Produces 動的に依存性を解決する
- ディスポーザメソッド @Disposes
- InjectionPointインスタンスのインジェクト
- Loggerなどに使用される
- CDIに含まれるスコープ
- @RequestScoped
- @SessionScoped
- @ApplicationScoped
- @ConversationScoped
- @Dependent
- @Singleton(使うメリットがない @ApplicationScoped を使う)
- ライフサイクルコールバックメソッド
- インターセプタ
- トランザクション管理
- セキュリティ関連
- メソッド開始・終了時ロギング
- @EnableTraceLog
- プリミティブ型や配列型、総称型のインジェクト
- @Inject と 限定子 @Config(独自アノテーション) の組み合わせによって propertiesファイルより値を設定できる
- @Alternativeによる代替Beanのインジェクト
- @Interceptors シンプルな実装を優先したい場合
- @InterceptorBinding 疎結合でより直感的なコード表現を優先したい場合
- @Decorator
- @Priority, beans.xml などで優先度を制御
- CDIイベント
- イベントオブジェクト
- @Observes, Eventクラス(@Injectする)
- 向き
- 特定のイベント発生に伴い、順序性を持たない処理を実行する機能
- 特定のイベント発生に伴い、複数CDI管理Bean間の状態を更新したい機能
- 不向き
- 処理の順序性を持つ機能
- 拡張の可能性が少ない機能
- 向き
- @Observes, Eventクラス(@Injectする)
- オブザーバ(@Observes)
- プロデューサ(Eventインターフェース)
- イベントオブジェクト
- REST HTTP Method
- GET/article/1 リソースの取得
- POST/article/ リソースの新規作成
- PUT/article/1 指定URLのリソースの新規作成もしくは更新
- DELETE/article/1 リソースの削除
- リソースクラスはエントリポイントとになるので状態を持たない → @ApplicationScoped を付与しても良いのではないか
- リソースクラスの例外とExceptionMapper
- Responseオブジェクト
- Response.ok(html).build();
- WebSocket
- ws:// or wss:// ではじまり JavaScriptでコードを書いて実現している
- 1つのクライアントごとに1つのEndPointオブジェクトが生成される(同期処理は考慮不要)
- リソース CSS, JavaScript は resourcesフォルダに配置する
- リロースのバージョン管理 JSFによって自動的に最新バージョンが適用される
- 管理Bean
- @RequestScoped
- @ViewScoped
- @SessionScoped
- @ConversationScoped
- @FlowScoped
- @ApplicationScoped
- @Dependent
- パラメータの渡し方
- クエリ文字列
- 同時にアクション実行
- クエリ文字列
- JSF 応用
- Validation
- Messages_jp.properties
- Object graph validation 子オブジェクトを制約対象にする
- Constraint Composition 制約をまとめる
- JPAの構成要素
- EJBタイマーサービス
- @Schedule あまり実用的ではない
機能 | CDI | EJB |
---|---|---|
@InjectによるDI | ○ | ○ |
インターセプタの適用 | ○ | ○ |
宣言的トランザクション | ○ | ○ |
@NamedによるEL式連携 | ○ | ○ |
スコープ | ○ | × |
@Startupによるデプロイ時初期化 | × | ○ |
タイマーサービス | × | ○ |
非同期メソッド実行 | × | ○ |
リモート呼び出し | × | ○ |
メソッドへの認証・許可設定 | × | ○ |
メッセージ駆動Bean | × | ○ |