EJB ile CDI Karşılaştırması
Bağımlılık enjeksiyonu ve işlemler için ağır EJB'leri hafif CDI bean'leri ile değiştirin.
@Stateless
public class OrderEJB {
@EJB
private InventoryEJB inventory;
public void placeOrder(Order order) {
// container-managed transaction
inventory.reserve(order.getItem());
}
}
@ApplicationScoped
public class OrderService {
@Inject
private InventoryService inventory;
@Transactional
public void placeOrder(Order order) {
inventory.reserve(order.getItem());
}
}
Hafif
CDI bean'leri, EJB'ye özel arayüzler veya tanımlayıcılar olmadan düz Java sınıflarıdır.
Birleşik enjeksiyon
@Inject; tüm yönetilen bean'ler, JAX-RS kaynakları ve Jakarta EE bileşenlerinde çalışır.
Kolay birim testi
EJB proxy ek yükü olmayan düz sınıflar, örneklendirmek ve mock'lamak için çok daha basittir.
Jakarta EE 8 / Java 11'den itibaren geniş çapta kullanılabilir
CDI (Contexts and Dependency Injection), EJB'lerle aynı bağımlılık enjeksiyonu ve işlem yönetimini sağlar; ancak kapsayıcıya özel arayüzler veya üst sınıflar olmadan düz Java sınıfları olarak. @ApplicationScoped ve @RequestScoped gibi kapsamlar yaşam döngüsünü kontrol eder; @Transactional ise zorunlu EJB işlem semantiğinin yerini alır.