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

EJB 3.0 依賴注入:@Resource/@Inject 註解與 IOC 容器整合實戰

     編輯:Java 相關知識

DI 在 EJB 3.0 的實現

EJB 3.0 內建依賴注入支援,透過欄位或 Setter 方法註解注入資源、環境項目、EJB 上下文等,無需 JNDI 手動查找。

核心註解對照

註解適用場景關鍵屬性
@Resource資料源、JMS、Mail、環境變數等一般資源name, jndiName, resourceType, authenticationType
@Inject單例資源(SessionContext, TimerService, UserTransaction, EntityManager)jndiName (可選)
@Resources批次注入多個資源value = @Resource[]

實戰範例:注入預設資料源查詢 JMS_USERS


@Stateless
public class JmsUsersBean implements JmsUsers {
    @Resource(jndiName="java:/DefaultDS", resourceType="javax.sql.DataSource")
    private DataSource customerDB;

    public List getUsers() {
        List list = new ArrayList<>();
        try (Connection conn = customerDB.getConnection();
             Statement st = conn.createStatement();
             ResultSet rs = st.executeQuery("SELECT userid FROM jms_users")) {
            while (rs.next()) list.add(rs.getString("userid"));
        } catch (SQLException e) { /* log */ }
        return list;
    }
}

單例資源簡化注入


@Inject SessionContext ctx;
@Inject TimerService timer;
@Inject UserTransaction ut;
@Inject EntityManager em;  // 需配合 @PersistenceContext 或 persistence.xml

優勢總結

  • 程式碼去耦 JNDI 查找邏輯,可測試性提升
  • 容器管理資源生命週期(連線池、交易邊界)
  • 支援漸進式遷移至 CDI (JSR-299) 完整 IOC 容器
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved