首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Java EE 6 平台的上下文與依賴注入 (CDI, JSR 299)

     編輯:J2EE

CDI 連結 Web 層與企業層,統一 EJB 與 JSF 程式模型

CDI (Contexts and Dependency Injection) 為 Java EE 元件提供生命週期上下文綁定、依賴注入、鬆耦合交互服務,讓企業 Bean 可替換 JSF 管理 Bean,成為 Web 與企業層的橋樑。

核心概念:受管 Bean

受管 Bean 為容器管理的 Java 類,可指定命名空間,享有生命週期管理、資源注入等服務。JSF 受管 Bean 加上作用域,EJB 會話 Bean 加上事務服務,CDI 加上依賴注入服務。以 @Model (內建固定模式註解) 標記 MVC 模型物件。

範例:登入流程

Credentials Bean (請求作用域):

@Model public class Credentials {
    private String username, password;
    // getter/setter
}

Login Bean (會話作用域、狀態會話 Bean):

@Stateful @SessionScoped @Model
public class Login {
    @Inject Credentials credentials;
    @Inject EntityManager userDatabase;
    @TransactionAttribute(REQUIRES_NEW) @RolesAllowed("guest")
    public void login() { ... }
    public void logout() { user = null; }
    public boolean isLoggedIn() { return user != null; }
    @Produces @LoggedIn @RolesAllowed("user") User getCurrentUser() { ... }
}

@SessionScoped 為 CDI 作用域註解,解決 EJB 無明確作用域、無法感知 Web 層上下文的問題。@Inject 執行型別安全注入,@Produces 標記生產者方法,@LoggedIn 為限定符 (@Qualifier)。

運行流程

用戶提交登入表單 → 容器實例化 Credentials 與 Login 上下文實例 → JSF 綁定輸入值 → 呼叫 login() → 同一 HTTP 會話後續請求共享 Login 實例,並透過生產者方法提供當前用戶物件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved