代码对比
✕ Java EE
@Stateless
public class OrderEJB {
@EJB
private InventoryEJB inventory;
public void placeOrder(Order order) {
// container-managed transaction
inventory.reserve(order.getItem());
}
}
✓ Jakarta EE 8+
@ApplicationScoped
public class OrderService {
@Inject
private InventoryService inventory;
@Transactional
public void placeOrder(Order order) {
inventory.reserve(order.getItem());
}
}
发现此代码有问题? 告诉我们。
为什么现代方式更好
轻量级
CDI bean 是普通 Java 类,无需 EJB 特定接口或描述符。
更易测试
普通 Java 对象,无需 EJB 容器即可进行单元测试。
现代标准
CDI 是 Jakarta EE 的推荐注入机制,持续演进。
旧方式
EJB
现代方式
CDI Bean
自 JDK
11
难度
中级
JDK 支持
EJB 与 CDI
可用
自 Jakarta EE 8 / Java 11 起广泛可用
工作原理
CDI(上下文和依赖注入)提供与 EJB 相同的依赖注入和生命周期管理,无需 EJB 特定接口或描述符。CDI bean 是普通 Java 类,容器负责其余工作。
相关文档