나는 두 개의 모듈, "BIZ"와 "EJB는"이런 식으로 뭔가를해야만 포함하는 모듈 받는다는 프로젝트가 : 보시다시피받는다는 순환 종속성이
//PART OF "BIZ" Module:
public interface MyInterface{
public void foo();
}
............................................
public class ImplFactory{
public static MyInterface getInterfaceImplementation(){
MyInterface ret=null;
Class<? extends MyInterface> cl = null;
try {
cl= (Class<? extends MyInterface>) Class.forName("InterfaceImpl");
ret= cl.newInstance();
}
....
ret ret;
}
.......................................
public class MyClassX{
public static void doSomethingX(){
}
}
//PART OF "EJB" Module:
public class InterfaceImpl implements MyInterface
@EJB
private MyEJB1 ejb1;
public void foo(){
ejb1.doSomething();
}
........................................
@Stateless
public class MyEJB1{
public void doSomething(){
...
MyClassX.doSomethingX();
....
}
}
는 "EJB"는 "BIZ"에 따라 달라집니다은 MyClassX을 사용합니다 (실제로는 여러 클래스의 BIZ를 사용합니다). 이것이 ImplFactory이 리플렉션을 사용하여 InterfaceImpl을 인스턴스화하는 이유입니다. 문제는 입니다. cl.newInstance()은 ClassCastException을 던집니다. 두 모듈은 각각 WAR 및 JAR (모듈 "EJB"는 type = "ejb"을 지정하고 maven ejb 플러그인을 사용하여 컴파일 됨)에 속해 있습니다. 다른 ClassLoader (JBoss 7에서 실행 됨). 반면에 InterfaceImpl은 작업에 대해 MyEJB1이 필요하므로 BIZ로 이동할 수 없으며 주기적 종속성이 도입됩니다.
내 질문은 : 어떻게 프로그래밍 방식으로 또는 구성을 변경하여이 까다로운 상황을 해결하겠습니까? 나를 도울 수 있기를 바랍니다. 감사!
첫 번째 질문 : 공장 대신 DI를 사용하는 이유는 무엇입니까? – khmarbaise
현재 상황을 그대로 유지할 수 있습니다. 상황을 과장했지만, getInterfaceImplementation()을 사용하여 수십 개의 클래스를 다루고 있습니다. (즉, 두 번째로 고려할 것입니다.) – Federico
나는 이제 호기심 .. :) 어떻게 CDI가 설명 된 문제를 해결하는 데 도움이 될까요? – Federico