2016-09-06 2 views
0

프로젝트 설정에 대해 조금 궁금합니다.CDI는 jar 파일간에 구체적인 의존성을 주입합니다.

내가 업데이트하려고하는 프로젝트가 있습니다.

그래서 구체적인 클래스 몇 개를 @Named ("") 주석으로 뒤덮었습니다. 클래스는 실제로 인터페이스를 구현하는 추상 클래스를 확장합니다. 명명 된 클래스를 해당 jar에 포함되지 않은 클래스에 삽입하려고합니다. 그렇게 할 때 유의해야 할 사항은 무엇입니까?

답변

1

귀하의 질문은 매우 모호합니다. 따라서이 답변이 귀하에게 세부 사항을 알려줄 것으로 기대하지 마십시오.

클래스는 실제로 인터페이스를 구현하는 추상 클래스를 확장합니다.

최종적인 bean 인스턴스는 계층에있는 모든 클래스와 인터페이스의 유형을 갖습니다. 걱정할 것이 없다.

명명 된 클래스를 해당 jar에 포함되지 않은 클래스에 삽입하려고합니다.

먼저 콩을 다른 콩에 주입 할 수 있습니다. 즉, 다른 클래스 (동일한 항아리에없는 클래스)가 콩이되어야한다는 의미입니다. 이를 위해 다른 아카이브에서 CDI를 활성화하고 원하는 범위로 클래스에 주석을 답니다.

둘째, 다른 항아리는 @Named 빈에 종속되어야하므로 CDI 컨테이너에서 해당 빈을 볼 수 있습니다.

마지막으로 콩에 적절한 범위를 사용해야합니다. 범위는 특정 컨텍스트에 속하며 각 컨텍스트마다 수명주기가 다릅니다. 따라서 예를 들어 @ApplicationScoped 빈은 앱 시작부터 종료까지 생존하며, @RequestScoped은 HTTP 요청 중에 만 활성화됩니다.

+0

입력 해 주셔서 감사합니다. 네 말이 맞아, 애매한 질문이었다. 나는 CDI와 그것의 능력에 처음이다. 원하는 범위로 클래스에 주석을 달 때, 나는 그것을 Named() 주석으로 주석 처리했다. CDI 컨테이너의 범위는 어떻게 작동합니까? 당신은 AplicationScope가 jvm startup-shutdown과 RequestedScoped live (HTTP 요청 당)로부터 살아 있음을 언급합니다. 두 콩에 주석을 추가해야합니까? – SoftwareSavant

+0

[http://weld.cdi-spec.org/documentation/](documentation)]를 참조하십시오. 귀하의 질문에 관해서는'@ Named'는 bean에게 어떤 범위도주지 않으며, 목표는 그것을 만드는 것입니다. [http://docs.jboss.org/weld/reference/latest/en-US/html_single/#_el_name] (EL에서 액세스 가능). '@ Named' 어노테이션 만있는 bean은 기본적으로'@ Dependent' 범위를 갖습니다. 다음 메모에서'@ ApplicationScoped'는 ** CDI 컨테이너 시작 ** (CDI가 부팅되고 마법이 시작되는 지점)에서 종료됩니다. '@ Dependent'가 당신에게 충분하다면 콩에 주석을 달 필요가 없습니다. – Siliarus

+0

CDI 컨테이너에서 범위가 작동하는 방법은 각 수명주기가 다르고 수명주기가 끝나면 연결된 빈이 파괴됩니다. '@ RequestScoped' 빈 요청 후. 새로운 요청이 팝업되면 새로운 빈을 얻게됩니다. @ SessionScoped가 어떻게 작동하는지 추측 할 수 있어야합니다. '@ ConversationScoped'와'@ Dependent'는 더 까다로울 수 있으며, 나는 (다시) Weld 문서를 제안합니다. 자신의 범위를 정의 할 수도 있습니다. – Siliarus

관련 문제