programing

CDI가 Spring의 좋은 대체물입니까?

abcjava 2023. 7. 25. 20:24
반응형

CDI가 Spring의 좋은 대체물입니까?

우리는 처음부터 웹 애플리케이션을 작성할 예정이며, Java EE6 표준을 준수하는 Glassfish의 최신 버전과 함께 사용하기로 결정되어 Spring 대신 CDI를 사용할 수 있는지 분석 중입니다.

CDI가 Spring을 대체할 수 있다고 말할 수 있을까요?

2021년 업데이트:제가 원래 질문에 답한 지 10년이 지났는데, 지금도 가끔 찬성표를 받고 있습니다.미래의 독자들에게 2011년의 Java Enterprise 환경을 반영하는 저의 답변을 그대로 받아 들일 것을 요청해도 될까요?

CDI는 "context and dependency injection"의 약자이며, Spring은 의존성 injection 컨테이너를 중심으로 한 완전한 에코시스템입니다.두 가지를 비교하려면 비교를 구분해야 합니다.

종속성 주입은 두 용기에서 모두 처리됩니다.주요 차이점은 CDI가 동적(일명: 상태 저장) 방식으로 DI를 처리한다는 점입니다. 즉, 실행종속성이 해결됩니다.Spring의 접근 방식은 정적입니다. 즉, 생성구성 요소가 함께 연결됩니다.CDI 방식은 언뜻 보기에는 다소 특이하게 보일 수 있지만 훨씬 우수하고 훨씬 더 많은 고급 옵션을 제공합니다(저는 두 개의 생산적인 CDI 앱을 배경으로 이 글을 씁니다).

생태계를 보면 상황이 다릅니다. 봄에는 많은 항아리(150개 이상)가 함께 제공되는 반면 CDI는 그 자체로 꽤 작습니다.일반적인 CDI 사용은 Java EE6 애플리케이션 서버 내부에 있지만 서블릿 엔진 또는 Java SE에서도 쉽게 작동할 수 있습니다.즉, CDI를 사용하는 것은 Hibernate, JPA, EJB 등을 사용하는 것을 가정하지 않습니다. 이는 사용자에게 달려 있습니다.

더 많은 기능이 필요한 경우 CDI에는 휴대용 확장 기능이 포함되어 있습니다(API 자체로 유용한 가치가 있음).Apache CODI 및 Seam 3와 같은 독립적인 확장 모듈이 존재하며 보안, 메일링, 보고 등과 같은 주제를 다룹니다.

요약하자면, CDI는 Spring 생태계의 "대체품"과는 전혀 다릅니다. 오히려 Spring의 종속성 주입 메커니즘에 대한 개선입니다.Java EE 6의 일부이므로 Java EE 6이 설치된 GlassFish를 사용하는 경우 CDI를 사용해야 합니다.제가 보기에 당신의 질문은 오히려 다음과 같습니다: 스프링을 Java EE 6으로 대체할 수 있을까요?제 대답은 꽤 명백한 것 같아요 ;-

Weld를 살펴봄으로써 좋은 시작을 할 수 있습니다.

스프링은 단순한 의존성 주입 용기 그 이상입니다.또한 AOP용 도구, JPA, SQL 등과 함께 사용할 수 있는 템플릿 등이 있습니다.

그러나 CDI는 Spring의 DI API를 대체하여 사용할 수 있습니다.

저는 Apache OpenWebBeans를 CDI 구현으로 사용하고 MyFaces CODI를 여러 프로젝트의 휴대용 확장으로 사용하고 있습니다.저는 그것에 매우 만족하고 아무런 문제가 없었습니다.OpenWebBeans는 현재 문서화 측면에서 약간 부족하지만 작동할 수 있는 것을 얻을 수 없는 경우 MyFaces에서 제공하는 메이븐 원형을 사용하여 필요한 모든 종속성을 가진 간단한 프로젝트를 생성하거나 메일링 목록에 문의하는 것이 매우 쉽습니다.응용프로그램에서 작업만 하고 악성 버그에 의해 차단되지 않는다면 매우 좋습니다.저는 또한 스프링과 함께 많은 프로젝트를 했습니다.괜찮아요. 하지만 다음 프로젝트에 무엇을 사용할지 묻는다면 명확한 대답은 OpenWebBeans와 CODI입니다. OpenWebBeans는 Weld보다 채택 가능하기 때문에 좋습니다. OpenWebBeans는 공식 CDI API/SPI에서 다루지 않는 모든 것을 사용자 지정할 수 있고 런타임 성능이 더 좋기 때문입니다.그리고 첫 번째 프로젝트 이후에 저는 다시는 CODI에 의문을 제기하지 않을 것입니다. 왜냐하면 CODI는 매우 안정적이고, 정기적으로 출시되며, 대부분 생산성을 크게 향상시키는 훌륭한 새로운 기능을 가지고 있기 때문입니다.CODI는 IMHO입니다. 가장 안정적이고 혁신적인 것은 CDI 전체에서 비롯됩니다.

질문에 대한 답변:저는 Spring을 완전히 대체했지만, 당신은 그 공백을 메울 수 있는 휴대용 확장이 필요합니다.CDI는 기본적으로 모든 것을 해결하려는 의도가 없었으며 대화와 같은 일부 부분은 설계에 의해 깨졌습니다.좋은 소식은 여러분이 MyFaces CODI와 같은 훌륭한 프로젝트를 가지고 있다는 것입니다. CODI는 거의 모든 문제를 해결합니다.

언급URL : https://stackoverflow.com/questions/5973364/is-cdi-a-good-replacement-of-spring

반응형