@EJB 또는 @Inject를 사용해야합니까
나는이 질문을 발견했다 : @Inject와 @EJB의 차이점은 있지만 더 현명하지는 않았다. Java EE를 수행하지 않았거나 종속성 주입에 대한 경험이 없어서 사용해야 할 것을 이해하지 못합니까?
@EJB와 오래된 주입 방법입니까? @Inject를 사용하는 동안이 주석을 사용할 때 EJB 컨테이너가 주입을 수행합니까? 새로운 CDI 프레임 워크를 사용합니까? 차이점이 있습니까? 그렇다면 @EJB 대신 @Inject를 사용해야합니까?
은 @EJB
EJB의 단지를 주입하는 데 사용 지금은 꽤 오랫동안 사용할 수 있습니다. @Inject
관리되는 Bean을 주입 할 수 있으며 Java EE 6부터 새 CDI 스펙의 일부입니다.
간단한 경우 간단히로 변경할 @EJB
수 @Inject
있습니다. 고급의 경우 (당신이 무겁게에 의존 할 때 예에서 @EJB
의 속성처럼 beanName
, lookup
또는 beanInterface
사용하기 위해서는보다) @Inject
정의해야합니다 당신을 @Producer
필드 나 메소드를.
이러한 자료는 다음 @EJB
과 의 차이점을 이해하는 데 도움이 될 수 있습니다 @Produces
.
Antonio Goncalves의 블로그 :
CDI 파트 I
CDI 파트 II
CDI 파트 III
JBoss Weld 문서 :
CDI 및 Java EE 에코 시스템
StackOverflow :
조건에 따라 @EJB 빈 삽입
@Inject
@EJB
EJB를 주입 할 수있는 동안 모든 Bean을 주입 할 수 있습니다. EJB를 주입하는 데 사용할 수 있지만 어느 @Inject
곳에서나 선호합니다 .
업데이트 : 이 답변이 정확하지 않거나 구식 일 수 있습니다. 자세한 내용은 의견을 참조하십시오.
I은 전환 @Inject
에 @EJB
있기 @EJB
반면, 원형 주입 있도록 @Inject
그것에 pukes한다.
세부 정보 : 메소드 @PostConstruct
를 호출 @Asynchronous
해야했지만 동기식으로 수행됩니다. 비동기 호출을 수행하는 유일한 방법은 원래 호출에 다른 Bean의 메소드를 설정하고 원래 Bean의 메소드를 다시 호출하는 것입니다. 이를 위해 각 Bean은 다른 Bean에 대한 참조가 필요했습니다. @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로 주입?
- 2009 년 11 월 20:48 아메리카 / 뉴욕 | 링크 개빈 킹
EJB 로컬 참조는 항상 직렬화 가능해야하므로이 오류는 매우 이상합니다. 글래스 피쉬 버그일까요?
기본적으로 @Inject는 다음과 같은 이유로 항상 좋습니다.
it is more typesafe, it supports @Alternatives, and it is aware of the scope of the injected object.
원격 EJB에 대한 참조를 선언하는 경우를 제외하고 @EJB를 사용하지 않는 것이 좋습니다.
과
다시 : @EJB 또는 @Inject로 주입?
2009 년 11 월 17 일 17:42 아메리카 / 뉴욕 | 링크 개빈 킹
원격 EJB를 사용하면 @EJB가 더 우수합니까?
원격 EJB의 경우 클라이언트가 단순히 해당 메타 데이터에 액세스 할 수 없으므로 Bean 클래스에서 규정 자, @Alternative 등의 메타 데이터를 선언 할 수 없습니다. 또한 로컬 사례 (글로벌 JNDI 이름)에 필요하지 않은 일부 추가 메타 데이터를 지정해야합니다. 따라서 모든 것들이 다른 곳으로 가야합니다 : 즉 @Produces 선언.
@EJB 및 @Inject를 사용할 때 Session Bean Identity의 용어 차이를 이해하는 것이 유용 할 수 있습니다. 사양에 따르면 다음 코드는 항상 다음과 같습니다 true
.
@EJB Cart cart1;
@EJB Cart cart2;
… if (cart1.equals(cart2)) { // this test must return true ...}
@EJB 대신 @Inject를 사용하면 동일하지 않습니다.
추가 정보 는 Stateless Session Bean ID 참조
예를 들어 @Resource, @PersistentUnit 또는 @EJB 어노테이션이있는 Java EE 5에 주입이 이미 존재합니다. 그러나 특정 리소스 (데이터 소스, EJB ...) 및 특정 구성 요소 (서블릿, EJB, JSF 지원 Bean 등)로 제한되었습니다. CDI를 사용하면 @Inject 주석 덕분에 거의 모든 것을 주입 할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/8138232/should-i-use-ejb-or-inject
'development' 카테고리의 다른 글
CMake?를 사용하여 폴더의 모든 파일을 대상에 자동으로 추가 하시겠습니까? (0) | 2020.06.19 |
---|---|
파이썬에서 메소드를 재정의하고 있음을 어떻게 표시합니까? (0) | 2020.06.19 |
웹 사이트에 해당하는 로그 파일 폴더를 찾는 방법은 무엇입니까? (0) | 2020.06.19 |
iterator-> second는 무엇을 의미합니까? (0) | 2020.06.19 |
많은 C ++ 표준 라이브러리 코드에서 불평등이 (! (a == b))로 테스트되는 이유는 무엇입니까? (0) | 2020.06.19 |