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 빈은 EJB 특정 인터페이스나 디스크립터가 없는 일반 Java 클래스입니다.

💉

통일된 주입

@Inject는 모든 관리 빈, JAX-RS 리소스, Jakarta EE 컴포넌트에서 작동합니다.

🧪

쉬운 단위 테스트

EJB 프록시 오버헤드 없는 일반 클래스는 인스턴스화하고 목으로 대체하기 간단합니다.

이전 방식
EJB
모던 방식
CDI 빈
JDK 버전
11
난이도
중급
EJB 대 CDI
사용 가능

Jakarta EE 8 / Java 11 이후 널리 사용 가능

CDI(컨텍스트와 의존성 주입)는 EJB와 동일한 의존성 주입을 제공하지만 EJB 특정 인터페이스나 디스크립터가 있는 무거운 컨테이너 없이 작동합니다.

공유 𝕏 🦋 in