EJB 3.0 內建依賴注入支援,透過欄位或 Setter 方法註解注入資源、環境項目、EJB 上下文等,無需 JNDI 手動查找。
| 註解 | 適用場景 | 關鍵屬性 |
|---|---|---|
| @Resource | 資料源、JMS、Mail、環境變數等一般資源 | name, jndiName, resourceType, authenticationType |
| @Inject | 單例資源(SessionContext, TimerService, UserTransaction, EntityManager) | jndiName (可選) |
| @Resources | 批次注入多個資源 | value = @Resource[] |
@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