2012-01-27 3 views
2

나는 주입 된 것을 요청하고있는 클래스의 이름을 알기 위해 주입 된 인스턴스를 원한다. 이러한 종류의 의존성 주입 개념을 위반하는 것은 알고 있지만 유용한 로깅을 지원하는 유효한 유스 케이스처럼 보입니다. Guice와 가능한가?Guice를 사용하여 주입을 요청하는 클래스를 주입 할 수 있습니까?

예 :

class InjectorAware { 
    @Inject 
    public InjectorAware(Class injectorClass){ 
     System.out.println("I was injected into a "+injectorClass.getCanonicalName()); 
    } 
} 

class NeedsInjectorAwareField { 
    @Inject InjectorAware injectorAware; 
} 

NeedsInjectorAwareField가 주입됩니다 때, 콘솔은 단지 Guice와 함께 할 수 있다면

답변

1

확실하지 "나는 somepackage.NeedsInjectorAwareField에 주입했다"인쇄 할 것이다, 그러나 그것은 같으면 주입 된 생성자를 처리하기에는 너무 어렵습니다. 그렇습니다.

public interface InjectorAware { 
    void setInjector(Object injectingInstance); 
} 

public class Foo { 

    @Injected 
    public Foo(InjectorAware injectorAware){ 
    injectorAware.setInjector(this); 
    } 

} 

그렇습니다. 그것이 좋은 생각인지 확신하지 못합니다.

+0

를 보라 주입 클래스는 추가 단계에 대해 걱정할 필요가 없습니다. 제안 해 주셔서 감사합니다. – pbaumann

4

Guice 실제로 이미 injectsjava.util.logging.Logger 이미 삽입 된 클래스의 이름으로 사용자 정의되어 있습니다. 어떻게 끝났는지 모르지만 Guice 소스에서 사용 된 기술을 빌리거나 로거를 직접 사용할 수 있습니다.

업데이트 : this은 Guice 소스에서이 동작을 담당합니다. 어떻게 든 테크닉을 빌릴 수 있을지 모르겠습니다.

+0

감사합니다. 나는 로거만을 찾고있는 것이 아니었지만 코드가 어떻게 완성되었는지를 살펴볼 것입니다. – pbaumann

+0

ogregoire에서 언급 한 문제는 관련성이있는 것으로 보이며이 트릭이 외부에서는 가능하지 않음을 제안합니다. –

1

I, 그것은 오래된 스레드하지만 여전히이 문제를 해결하려고하는 그 사람에 대해 알고 그것은 솔루션,하지만 내 목적을 위해 내가 선호하는 것입니다 https://github.com/raner/loginject

관련 문제