2009-08-02 2 views
1

특정 유형의 인스턴스가 여러 개 필요한 guice 기반 응용 프로그램이 있으므로 종속성을 명확히하기 위해 명명 된 주석을 사용할 계획입니다. 그러나이 유형의 종속성은 내가 얻은 결과에 따라 달라질 필요가 있습니다. 설명하기Guice : 소유자가 주입 된 방식에 따라 주입되는 유형 변경

내가

@Singleton 
public class FooCache { 
    private final FooCacheListener listener; 
    @Inject 
    public FooCache(FooCacheListener listener) { 
     this.listener = listener; 
    } 
    // do stuff 
} 

을 가지고 말할 수 그리고 내가

하나 개의 클래스에
@ThatOne FooCache 

@ThisOne FooCache 
을 가질 수 있도록 내가 2 개 별도의 인스턴스에 대한 필요성이 있다고 할 수 있습니다 다른 하나는

입니다.

이제 각각의 경우에 다른 수신기를 원한다고 말하면됩니다 (어쩌면 하나는 데이터베이스에 뭔가 쓰고 다른 하나는 JMS 또는 일부 분산 캐시에 알림을 보냅니다). 내가 어떻게 그럴 수 있니? 나는 하나의 상황에서 다른 이름을 필요로 할 때 FooCacheListener에 이름을 붙일 수있는 것을 볼 수 없다. 반면에 여기에는 하나의 장소 만있다. 이 일을 생각할 수있는 유일한 방법은 FooCache를 서브 클래 싱하는 것입니다. 그러나 그것은 나에게 정말 서투른 접근 방법입니다.

환호 매트

답변

2

당신은 PrivateModules을 사용할 수 있습니다. here으로 이동하여 까지 스크롤하십시오. 비슷하지만 약간 다른 오브젝트 트리를 어떻게 만들 수 있습니까? 같은 클래스의 두 개의 다른 인스턴스를 갖는 방법입니다.이 클래스는 수행하려는 작업과 거의 동일하게 들립니다. 이 예제에서 전달 된 "lefty"와 "righty"대신에 cachelisteners를 전달할 수 있습니다. 원하는 정보가있는 링크가 더 있습니다.

또 다른 옵션은 질문에 위의 링크에서 논의 된 팩토리를 삽입하는 것일 수도 있습니다. Guice를 통해 개체를 만들 때 매개 변수를 전달하는 방법은 무엇입니까?

+0

어떻게 든 나는 문서에서 그 것을 놓쳤다. 그것은 내가 찾고있는 것이다. 감사. – Matt

관련 문제