Enterprise Средний

Замените громоздкие EJB облегчёнными CDI-бинами для внедрения зависимостей и управления транзакциями.

✕ 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-бины — это простые Java-классы без EJB-специфичных интерфейсов или дескрипторов.

💉

Единое внедрение

@Inject работает единообразно для любого управляемого бина, JAX-RS-ресурса и компонента Jakarta EE.

🧪

Простое модульное тестирование

Простые классы без EJB-прокси-overhead легко инстанциировать и заменять заглушками.

Старый подход
EJB
Современный подход
CDI-бин
Начиная с JDK
11
Сложность
Средний
EJB против CDI
Доступно

Широко доступно начиная с Jakarta EE 8 / Java 11

CDI (Contexts and Dependency Injection) предоставляет те же возможности внедрения зависимостей и управления транзакциями, что и EJB, но в виде простых Java-классов без специфичных для контейнера интерфейсов или суперклассов. Области видимости, такие как @ApplicationScoped и @RequestScoped, управляют жизненным циклом, а @Transactional заменяет обязательную транзакционную семантику EJB.