Glassfish 3.1.2.2, java ee6을 사용하고 있습니다.java ee6 : 대체 CDI 대체
클래스에서 CDI를 사용하여 도우미 클래스를 얻는 라이브러리가 있습니다. 하나의 특정 프로젝트에서 라이브러리를 사용하고, CDI 의존성을 재정의하고 라이브러리가 내 프로젝트의 고유 한 도우미 클래스를 사용하도록하고 싶습니다. 라이브러리는 자유롭게 수정할 수 있지만 기본적으로 기본 도우미 클래스를 사용해야하므로 라이브러리의 다른 사용자도 동작이 변경되지 않습니다.
이것은 CDI 패턴 @Alternative
의 완벽한 응용 프로그램이어야합니다. 헬퍼 클래스 API를위한 Java 인터페이스를 만들었습니다. 라이브러리에 기본 구현이있는 경우 beans.xml
에 <alternatives>
태그를 사용할 수 있습니다. 프로젝트에서 내가 동작을 오버라이드하고 싶다면, 그 특정 프로젝트의 beans.xml에 헬퍼의 구현을 명시 할 것이다.
예외 : 작동하지 않는 경우. CDI 1.0 (java ee6)의 라이브러리 외부에서 라이브러리의 대체 동작을 무시하려면 apparentlyimpossible입니다.
그래서 내 외부 프로젝트의 beans.xml에서 지정하는 것과 관계없이 CDI는 라이브러리에 정의 된 빈을 계속 선택합니다.
필자는 going through a producer으로 생각했지만 제작자에게 매개 변수로 EntityManager를 제공하는 방법을 찾지 못해서 도우미 클래스로 전달할 수 있습니다. 이 프로젝트에서는 일반적으로 @PersistenceContext
주석을 사용하여 EntityManager를 삽입합니다.
외부 프로젝트에서 CDI 삽입을 무시하는 방법에 대한 아이디어가 있습니까?
'@ Priority'주석은 어떻게됩니까?이 경우에는 작동하지 않습니까, 아니면 JEE 7입니까? – albogdano
응? CDI 1.0 또는 1.1에 '@ Priority'주석이 없습니다. – LightGuard
JEE 7에서 [docs] (http://docs.oracle.com/javaee/7/tutorial/doc/cdi-adv002.htm)를 읽었습니다. . 그러면 @Alternative @Priority (Interceptor.Priority.APPLICATION + 10) 공용 클래스 X'를 작성하고 주석 만 사용하여 기본 bean을 대체 할 수 있습니다. – albogdano