2011-10-18 2 views
4

싱글 범위로 주입하고, 클래스 B는 A.Guice 내가 인터페이스 A를 가지고

그러나 구현, B의 생성자가 보인다 부트 스트랩 이후에만 생성 될 수 있습니다. 그리고 나는 B가 싱글 톤이되기를 원합니다.

Guice에서 구현하기가 어렵다는 것을 알았습니다. 보조 인젝터를 사용하여이 작업을 수행 할 수 있음을 알고 있습니다. 인젝터 캐노 미터가 싱글 톤 인스턴스를 생성하는 데 도움이되는 것처럼 보입니다.

어떻게 구현하나요?

감사합니다.

답변

1

에서 C의 인스턴스를 만들어 컨텍스트에 추가 할 수 있습니다. 그런 다음 보통 B 클래스에 주석을 달 수 있습니다.

@Singleton 
public class B... 
+0

답해 주셔서 감사합니다. 하지만 제가 말했듯이, 부트 스트랩 전에 C를 생성하는 것은 불가능합니다. C가 Singleton이기는하지만 애플리케이션이 실행될 때만 즉석에서 생성됩니다. – Wudong

+0

부트 스트랩의 의미에 달려 있다고 생각합니다. Guice를 사용하면 모듈이 구성 될 때 프로그래밍 방식으로 제어 할 수 있습니다. 따라서 부트 스타팅이 완료 될 때까지 프로그래밍 방식으로 기다린 다음 B & C 클래스를 다루는 모듈을 구성하십시오. –

+0

AFactory를 도움없이 구식으로 코딩하면 어떨까요? Guice를 사용하여 공장에 주입하지만 수동으로 createA를 구현하십시오. – ollins

1

여기 보조 주사가 필요하지 않다고 생각합니다.

Provider<C>을 구현하고 바인딩하는 것에 대해 생각해 보셨습니까? 그런 다음 CB으로 삽입 될 수 있습니다 (그리고 어느 곳에서나 C이 필요합니다).

5

알다시피 보조 주사를 사용하여 싱글 톤을 만들 수 없습니다. Assisted inject는 프로그래밍 방식의 매개 변수를 필요로하는 인스턴스를위한 것이며 싱글 톤은 프로그래밍 방식으로 생성되지 않습니다.

모듈의 바인딩에서 asEagerSingleton()을 호출하지 않는 한, 싱글 톤은 느리게 구성됩니다 (). 그래서 당신은 간단히 C를 B에 주입 할 수 있으며 guice 인젝터가 생성 된 후에 C의 인스턴스가 생성됩니다. C의 생성이 더 복잡하다면, C의 제공자를 생성하여 모듈에 바인딩하십시오.