2010-04-04 13 views
2

저는 JSR-299 Reference Implementation "Weld"를 독립 실행 형 응용 프로그램에서 사용하기위한 목적으로 사용해 보았습니다. 설명서를보고 마법에 놀랐습니다.@Inject in Weld (JSR-299 RI)를 사용한 종속성 삽입. 해당 @Produces는 어떻게 발견됩니까?

내 질문은 어떻게 주어진 개체의 생산자 @ Inject'ed 찾을 수 있습니까?

Java 컴파일러는 클래스 로더가 쉽게 찾을 수있는 주석에 대한 힌트를 생성하거나 전체 클래스 패스를 탐색하여 모든 클래스를로드하여 어떤 작업이 내게 매우 비효율적인지 또는 전혀 다른 접근 방식인지 확인해야합니다.

트릭이란 무엇입니까?

답변

4

클래스 경로에서 "빈 아카이브"가 검색됩니다. 빈 아카이브는 META-INF/beans.xml을 포함하는 라이브러리입니다. 이 아카이브의 모든 bean은 자동으로 BeanManager으로 등록되며 해당 주석은 구문 분석되어 저장됩니다. 생산자가 필요할 때마다 빈 관리자는 적격 한 생산자에 대해 상담을받습니다.

0

나는 Seam에서와 똑같이 동작한다고 가정한다 : 클래스 패스가 실제로 스캔된다. impl은 범위가 가장 작은 @produce를 검색하므로 로그인 한 사용자의 경우 세션 수준에서 세션을 생성하고 익명 사용자의 경우 애플리케이션 수준에서 세션을 생성 할 수 있습니다.

0

Dunno 그러나이 @Inject는 Hibernate의 아버지에 의해 부분적으로 수행되었지만 SpringSource와 Google에 의해 최종적으로 다시 수정/영향을 받았습니다. 아마 그것은 Guice와 약간 비슷하게 작동할까요?

+0

'@ Inject' 주석 자체는 Guice 및 Spring 멤버가 구성한 팀에 의해 지정되었습니다. 다른 JSR의 일부입니다. – Bozho