programing

@EJB를 사용할지 @Inject를 사용할지

prostudy 2022. 8. 15. 09:20
반응형

@EJB를 사용할지 @Inject를 사용할지

나는 다음과 같은 질문을 발견했다.@Inject와 @EJB의 차이점은 무엇입니까? 하지만 는 더 이상 깨닫지 못했습니다.Java EE를 해본 적도 없고 의존성 주입을 해본 적도 없기 때문에 무엇을 사용해야 할지 잘 모르겠습니다.

있나@EJB옛날 주사법?사용 중 이 주석을 사용할 때 EJB 컨테이너에 의해 주입됩니까?@Inject새로운 CDI 프레임워크를 사용하시겠습니까?그게 차이점인가요? 그리고 제가 사용해야 하는 것은@Inject대신@EJB이런 경우라면?

@EJB는 EJB만을 주입하는 데 사용되며 현재 상당 기간 사용할 수 있습니다. @Inject는 모든 관리 대상 빈을 삽입할 수 있으며 새로운 CDI 사양의 일부입니다(Java EE 6 이후).

간단한 경우 간단히 변경할 수 있습니다.@EJB로.@Inject. 보다 고도의 경우(예: 의존도가 높은 경우)@EJB님의 특성beanName,lookup또는beanInterface)를 사용하기 위해서입니다.@Inject정의해야 합니다.@Producer필드 또는 메서드.

이러한 리소스는 다음 두 리소스 간의 차이를 이해하는 데 도움이 될 수 있습니다.@EJB그리고.@Produces그 장점을 살리는 방법:

Antonio Goncalves 블로그:
CDI 파트 I
CDI 파트 II
CDI 파트 III

JBoss 용접 문서:
CDI 및 Java EE 생태계

Stack Overflow:
조건에 따라 @EJB bean 주입

@Inject어떤 콩도 주입할 수 있지만@EJB는 EJB만 주입할 수 있습니다.어느쪽이든 EJB를 주입할 수는 있지만@Inject온통.

업데이트: 이 답변은 올바르지 않거나 최신이 아닐 수 있습니다.자세한 것은, 코멘트를 봐 주세요.

에서 전환했습니다.@Inject로.@EJB왜냐면@EJB원형 주입이 가능한 반면,@Inject토할 것 같아.

세부사항:필요했어요@PostConstruct을 부르다@Asynchronous동기화할 수 있습니다.비동기 호출을 하는 유일한 방법은 원래 호출을 다른 빈의 메서드로 하고 원래 빈의 메서드를 콜백하는 것이었습니다.이렇게 하기 위해서는 각 콩이 서로 참조가 필요했습니다. 즉, 원형입니다. @Inject이 작업에 실패했습니다.@EJB일했다.

여기 그 주제에 대한 좋은 토론이 있다.Gavin King은 원격이 아닌 EJB에 대해 @EJB보다 @Inject를 권장합니다.

http://www.seamframework.org/107780.lace

또는

https://web.archive.org/web/20140812065624/http://www.seamframework.org/107780.lace

순서: @EJB 또는 @Inject로 주입하시겠습니까?

  1. 2009년 11월 20일 20:48 America/New_York| Link Gavin King

EJB 로컬 참조는 항상 직렬화 가능해야 하므로 이 오류는 매우 이상합니다.글라스피쉬에 벌레라도 있나?

기본적으로는 @Inject가 항상 좋습니다.그 이유는 다음과 같습니다.

it is more typesafe,
it supports @Alternatives, and
it is aware of the scope of the injected object.

원격 EJB에 대한 참조를 선언하는 경우를 제외하고 @EJB를 사용하지 않는 것이 좋습니다.

그리고.

순서: @EJB 또는 @Inject로 주입하시겠습니까?

  1. 2009년 11월 17일 17:42 America/New_York| Link Gavin King

    @EJB는 원격 EJB가 더 낫다는 의미입니까?

원격 EJB의 경우 클라이언트가 메타데이터에 액세스할 수 없기 때문에 bean 클래스에 한정자, @Alternative 등의 메타데이터를 선언할 수 없습니다.또한 로컬 케이스(글로벌 JNDI 이름)에 필요 없는 추가 메타데이터를 지정해야 합니다.따라서 이러한 모든 것은 다른 곳으로 이동해야 합니다. 즉, @Produces 선언입니다.

또한 @EJB와 @Inject를 사용할 때 세션빈 ID의 차이를 이해하는 것도 도움이 될 수 있습니다. 다음 양양음음음음음음음음음음 will will will will will will will will will 이다.true:

@EJB Cart cart1;
@EJB Cart cart2;
… if (cart1.equals(cart2)) { // this test must return true ...}

@EJB가 아닌 @Inject를 사용하면 동일하지 않습니다.

자세한 내용은 스테이트리스 세션빈 ID도 참조해 주세요.

예를 들어 Java EE 5에는 @Resource, @PersistentUnit 또는 @EJB 주석이 이미 있습니다.그러나 이는 특정 리소스(데이터 소스, EJB 등)와 특정 구성요소(서블릿, EJB, JSF 백업 빈 등)로 제한되었습니다.CDI를 사용하면 @Inject 주석 덕분에 거의 모든 곳에 주입할 수 있습니다.

EJB와 함께 @EBJ를 사용합니다.이것은, 인터페이스의 타입(계층 애플리케이션)에 의존하지 않는 별개의 비즈니스 로직 레이어를 작성하기 위해서입니다.

이것에 의해(적절하게 사용) 비즈니스 로직을 (복수의) 사용자 인터페이스 애플리케이션으로부터 개별적으로 변경 및 도입할 수 있습니다.

언급URL : https://stackoverflow.com/questions/8138232/should-i-use-ejb-or-inject

반응형