CDI는 Spring의 좋은 대체품입니까?
우리는 웹 애플리케이션을 처음부터 작성할 계획이며 Java EE 6 표준을 준수하는 Glassfish의 최신 버전을 사용하기로 결정했기 때문에 Spring 대신 CDI를 사용할 수 있는지 분석하고 있습니다.
CDI가 Spring을 대체 할 수 있다고 말할 수 있습니까?
CDI는 "컨텍스트 및 종속성 주입"을 의미하는 반면 Spring은 종속성 주입 컨테이너를 둘러싼 완전한 에코 시스템입니다. 두 가지를 비교하려면 비교를 차별화해야합니다.
종속성 주입 은 두 컨테이너 모두에서 처리됩니다. 가장 큰 차이점은 CDI가 동적 (일명 상태 저장) 방식으로 DI를 처리한다는 사실입니다 . 즉, 실행 시간에 종속성이 해결됩니다 . Spring의 접근 방식은 정적입니다. 즉, 생성시 구성 요소가 함께 연결됩니다 . CDI 방식은 언뜻보기에는 약간 특이한 것처럼 보일 수 있지만 훨씬 우수하고 훨씬 더 많은 고급 옵션을 제공합니다 (2 개의 생산적인 CDI 앱의 배경으로이 글을 작성하고 있습니다).
당신이 보면 생태계 , 상황은 다르다 : 봄은 번들로 제공 의 많은 CDI는 그 자체로 아주 작은 반면, 항아리 (> 150). 일반적인 CDI 사용은 Java EE 6 애플리케이션 서버 내부에 있지만 서블릿 엔진 또는 Java SE에서도 쉽게 작동하도록 만들 수 있습니다. 이것은 CDI를 사용하는 것이 Hibernate, JPA, EJB 또는 무엇이든 사용하는 것에 대해 가정하지 않는다는 것을 의미합니다. 그것은 당신에게 달려 있습니다.
더 많은 기능이 필요한 경우 CDI는 이식 가능한 확장 의 개념과 함께 제공됩니다 (그 자체로 API를 유용하게 만듭니다). Apache CODI 및 Seam 3과 같은 독립적 인 확장 모듈이 존재하며 보안, 메일 링,보고 등과 같은 주제를 다룹니다.
요약하자면 CDI는 Spring 생태계의 "대체"와 같은 것이 아니며 오히려 Spring의 의존성 주입 메커니즘을 개선 한 것입니다. Java EE 6의 일부이므로 Java EE 6과 함께 GlasFish를 사용하고 있다면 CDI를 선택해야합니다. 내 눈에 당신의 질문은 오히려 : Spring을 Java EE 6으로 바꿀 수 있습니까? 내 대답은 꽤 분명하다고 생각합니다 ;-)
좋은 시작을 위해 Weld 를 살펴보십시오 ...
Spring은 단순한 의존성 주입 컨테이너 그 이상입니다. 또한 AOP 용 도구, JPA, SQL 등과 함께 사용하기위한 템플릿 등이 있습니다.
그러나 CDI는 Spring의 DI API 대신 사용할 수 있습니다.
Apache OpenWebBeans를 사용 하고 있습니다.CDI 구현 및 MyFaces CODI를 여러 프로젝트의 휴대용 확장으로 사용합니다. 나는 그것에 매우 만족하고 문제가 없었습니다. OpenWebBeans는 현재 문서의 관점에서 약간 부족하지만 작업 할 것이없는 경우 MyFaces에서 제공하는 Maven Archetypes를 사용하여 필요한 모든 종속성이있는 간단한 프로젝트를 생성하거나 메일 링리스트에 요청하는 것이 매우 쉽습니다. 응용 프로그램에서 작업 만하고 불쾌한 버그에 의해 차단되지 않는 경우 매우 좋습니다. 나는 또한 Spring과 함께 많은 프로젝트를했다. 괜찮습니다.하지만 다음 프로젝트에 무엇을 사용할 것인지 묻는다면 분명한 대답은 OpenWebBeans와 CODI입니다! 나는 Weld보다 OpenWebBeans를 선호합니다. OpenWebBeans는 매우 채택 가능하기 때문입니다. 공식 CDI API / SPI가 적용되며 런타임 성능이 더 좋습니다. 그리고 첫 번째 프로젝트 이후에 저는 CODI가 매우 안정적이기 때문에 다시는 의문을 제기하지 않을 것입니다. 그들은 정기적으로 출시되었으며 대부분의 경우 생산성을 크게 향상시키는 새로운 기능을 가져 왔습니다. CODI는 가장 안정적이고 대부분의 혁신이 전체 CDI 땅에서 나온 IMHO입니다.
질문에 답하려면 : CDI가 Spring을 완전히 대체했지만 그 공백을 메울 수있는 이식 가능한 확장이 필요합니다. 표준으로서의 CDI는 모든 것을 해결하려는 의도가 없으며 대화와 같은 일부 부분은 설계 상 깨졌습니다. 좋은 소식은 MyFaces CODI와 같은 훌륭한 프로젝트가 있다는 것입니다. CODI는 거의 모든 문제를 해결합니다.
참고 URL : https://stackoverflow.com/questions/5973364/is-cdi-a-good-replacement-of-spring
'Nice programing' 카테고리의 다른 글
ORA-00972 식별자가 너무 긴 별칭 열 이름입니다. (0) | 2020.11.11 |
---|---|
유사한 결과를 찾고 유사성을 기준으로 정렬하는 방법은 무엇입니까? (0) | 2020.11.11 |
Android 애플리케이션에서 런타임에 라이브러리를 동적으로로드 할 수 있습니까? (0) | 2020.11.11 |
.NET 4.0 작업 패턴을 사용하여 HTTPClient .ReadAsAsync로 JSON을 배열 또는 목록으로 역 직렬화 (0) | 2020.11.11 |
Groovy 클로저에서 "계속"시뮬레이션을위한 최상의 패턴 (0) | 2020.11.11 |