하위 클래스의 유형에 따라 CDI를 사용하여 필드를 주입하려는 클래스 계층 구조가 있습니다. 이러한 상황은 자바 코드 다음에 설명되어 있습니다 :CDI : 객체 클래스 기반 주입
@Stateless
public class A {
@Inject
@MyInjection
D d;
...
public void templateMethod(){...};
protected void step1(){...};
protected void step2(){...};
}
@Stateless
public class B extends A {
...
protected void step1(){...};
protected void step2(){...};
}
@Stateless
public class C extends A {
...
protected void step1(){...};
protected void step2(){...};
}
public class F {
@Produces
@MyInjection
D myProducer(InjectionPoint ip){
Class<?> clazz = ip.getMember().getDeclaringClass();
//if clazz is B then inject one type
//if clazz is C then inject other type
//default inject default type
}
}
이 콩 EAR의 일부로서 적절한 ejb.jar 아카이브를 포장하고 적절한 장소에 beans.xml 환경 파일이 있습니다. 이 코드는 Java EE 7을 사용하여 Wildfly 10 서버에서 실행됩니다. 필드는 다음과 같이 논리적으로 생각할 때 클래스 기본 클래스 (이 경우 클래스 A)를 가져옵니다.이 코드를 사용하면이 코드를 사용할 수 있습니다. 실제로 클래스 A에 있습니다. 요점은 내가 수퍼 클래스에 주입하더라도 하위 클래스를 기반으로 구별을하고 싶습니다.
InjectionPoint 클래스를 사용하여이를 수행 할 수 있습니까? 이것을 달성 할 수있는 방법이 있습니까?
이 코드에 대해 더 자세히 설명해 드리겠습니다. 이 계층 구조는 템플릿 패턴 디자인 패턴을 구현하며 모든 클래스는 구체적입니다. 일반 알고리즘 및 특정 단계를 구현하는 클래스 A를 사용할 수 있지만 일부 하위 클래스의 단계를 재정의하도록 선택할 수 없습니다. 또한 sublclass에 따라 다를 수있는 특정 유형 D를 주입 할 필요가 있습니다.
저음 클래스 A를 재 설계하지 않으려는 열망이 있습니다. 그래서 저는 CDI를 사용하고 배포 설명자를 사용하지 않고 기본 클래스에 무언가를 주입하는 방법을 찾고자합니다.
귀하의 질문에 모두 언급 했으니 –