범위가 @Dependent
인 범위의 경우 a way documented in the CDI spec입니다.
일반적인 생각은 CDI가 InjectionPoint
이라는 객체를 주입 할 수있게하고,이 콩을 주입 한 콩에 대한 정보를 얻을 수 있다는 것입니다.
@Dependent //if you don't declare any scope, it's @Dependent by default
public class MyBean {
@Inject
InjectionPoint ip;
public void doStuff() {
// gives you the name of declaring class
ip.getMember().getDeclaringClass().getName();
}
}
는 다른 방법으로, 콩 만드는 동안이 문제를 처리하기 위해 여러분의 빈에서 생성자 주입을 사용할 수 있습니다 :
여기에 짧은 조각이다. 그것은 아마도에 대한 당신이 무엇을 목표에 근접 할 수 있습니다
@Dependent //if you don't declare any scope, it's @Dependent by default
public class MyAnotherBean {
public MyAnotherBean(InjectionPoint ip) {
// CDI will inject InjectionPoint automatically
ip.getMember().getDeclaringClass().getName();
}
}
다시 참고이 만 @Dependent
에 대한 작품! 왜? 왜냐하면 @Dependent
은 주입 지점마다 새로운 인스턴스를 만들고 프록시를 사용하지 않기 때문입니다. 따라서이 인스턴스를 누가 만들 었는지 정확하게 알 수 있습니다. @RequestScoped
, @SessionScoped
등과 같은 다른 범위는 프록시를 사용하므로 CDI에서 하나의 개체를 인스턴스화 한 다음 주입이 요청 될 때마다 프록시를 전달합니다.
감사합니다,이 작동하는 것 같습니다. 이것은 실제로 더 우아한 해결책처럼 보입니다! 당신의 명확한 설명을 주셔서 감사합니다! – Bgvv1983
@ Bgvv1983 여러분을 환영합니다. 그건 그렇고, 당신이 해결책으로 자신의 대답을 표시 참조하십시오. 내 대답이 빠졌습니까? 그냥 추가 정보를 제공 할 수 있는지 묻고 싶습니다. :) – Siliarus
Hmzz가 작동하지 않는 것처럼 보입니다. ip.getMember(). getDeclaringClass(). getName(); 은 MyBean.class를 제공합니다. – Bgvv1983