2013-08-16 3 views
0

CDI 주석이있는 bean을 선언하는 jar와 관련된 문제점이 있으며 스프링 컨텍스트와 EE6 컨텍스트에서 모두 사용됩니다.EI6 컨텍스트와 Spring DI 컨텍스트에서 모두 사용되는 CDI 주석이있는 클래스

이 항아리, service.jar은 (@Qualifier 당신은 당신의 bean을 식별하기 위해 @DataAccessObject으로 자신의 주석을 선언 할 수 있습니다) 한정자 주석 클래스를 포함하고 @Inject 주석 개인 회원을 보유 말한다.

maven으로 컴파일되었으므로 javax.javaee-api에 대한 종속성은 provided으로 선언됩니다. 이러한 클래스는 EE6 컨텍스트 내에 배포 된 경우에만 필요하기 때문입니다.

비록 내가 이해하지 못하는 것이 있습니다. 이 service.jar에서 컴파일 된 후 EE6 컨텍스트에 배포하는지 여부는 바이트 코드가 [email protected]과 같은 클래스를 참조합니다.

그렇다면 스프링 응용 프로그램 (해당 클래스 경로에 javax.javaee-api jar가 없음)이 올바르게 구성을로드하고 실행할 수있는 이유는 무엇입니까? 봄이 @Inject (JSR 330) 주석을 지원한다는 것을 알았을 때 더욱 혼란 스러웠습니다.

누구나 저에게 계몽 할 수 있습니까?

감사합니다.

+0

이 긴 역사가있다는 주로 정치적,이 비록 완전하게, 약간의 실마리를. http://stackoverflow.com/questions/7238407/will-spring-support-cdi – rdcrng

답변

0

DI (JSR330)와 CDI (JSR299)를 혼동해서는 안됩니다. CDI에는 DI가 포함됩니다. 모든 javax.inject 어노테이션은 DI에 속하며 많은 프레임 워크 (예 : 스프링 및 guice)에서 지원됩니다.

jar 종속성을 JSR330으로 엄격하게 줄이면 (배포를 위해 Java EE deps를 전환 할 필요가 없음) 모든 지원 프레임 워크를 사용할 수 있습니다.

체크 아웃이 예 : http://www.mkyong.com/spring3/spring-3-and-jsr-330-inject-and-named-example/

+0

JSR299에 대해 알지 못했습니다. 감사합니다. 스프링 응용 프로그램에서 바이트 코드의'javax.inject' 참조를 포함하는 항아리를로드 할 수있는 방법에 대해 여전히 혼란 스럽지만 클래스 패스에서이 종속성을 채울 것이 없습니다. – Localolhst