Contexts and Dependency Injection 101
除了一般DI的功能外,CDI多了Context Sensitive,Context在HTTP中,指的是Request, Response, Session, Application, …這些scopes. 當然還有搭配這些scope用的decorators, interceptors。 使用CDI最重要的事,莫過於決定物件要binding的scopes,針對這些scopes的使用時機如下:
Dependent
預設的scope,生命週期與被@injected的物件相同。
ApplicationScoped
跟著application server啟動而啟動,停止而停止的。
適用於比較特別的services(stateful), helper classes, 或sharing data(全局的權限或計數器)。
read only的service也很適合,因為不需要考慮thread safe的問題
RequestScoped
http request的scope。
適用於做http request溝通,常被當作網頁與程式邏輯間的DTO使用。
SessionScoped
http session的scope,隨sesion的建立而開始,session消滅而結束。
適用需要跟著使用者跑的資料或服務(像認證資訊或權限資訊)。
ConversationScoped
沒用過,不清楚,文件上是說常通比session短,但比request長的一個scope.
Stateless
這個應該不算是一個scope,但一般的service methods (objects)應該都屬stateless的。
TBD
- EL操作webbean方式
- 單元測試
- CDI與JPA
- decorators
- interceptors
- events
- @Producers
- @Disposers
[java
^1)^ 並沒有這種scope