싱글 범위로 주입하고, 클래스 B는 A.Guice 내가 인터페이스 A를 가지고
그러나 구현, B의 생성자가 보인다 부트 스트랩 이후에만 생성 될 수 있습니다. 그리고 나는 B가 싱글 톤이되기를 원합니다.
Guice에서 구현하기가 어렵다는 것을 알았습니다. 보조 인젝터를 사용하여이 작업을 수행 할 수 있음을 알고 있습니다. 인젝터 캐노 미터가 싱글 톤 인스턴스를 생성하는 데 도움이되는 것처럼 보입니다.
어떻게 구현하나요?
감사합니다.
싱글 범위로 주입하고, 클래스 B는 A.Guice 내가 인터페이스 A를 가지고
그러나 구현, B의 생성자가 보인다 부트 스트랩 이후에만 생성 될 수 있습니다. 그리고 나는 B가 싱글 톤이되기를 원합니다.
Guice에서 구현하기가 어렵다는 것을 알았습니다. 보조 인젝터를 사용하여이 작업을 수행 할 수 있음을 알고 있습니다. 인젝터 캐노 미터가 싱글 톤 인스턴스를 생성하는 데 도움이되는 것처럼 보입니다.
어떻게 구현하나요?
감사합니다.
에서 C
의 인스턴스를 만들어 컨텍스트에 추가 할 수 있습니다. 그런 다음 보통 B
클래스에 주석을 달 수 있습니다.
@Singleton
public class B...
여기 보조 주사가 필요하지 않다고 생각합니다.
Provider<C>
을 구현하고 바인딩하는 것에 대해 생각해 보셨습니까? 그런 다음 C
은 B
으로 삽입 될 수 있습니다 (그리고 어느 곳에서나 C
이 필요합니다).
알다시피 보조 주사를 사용하여 싱글 톤을 만들 수 없습니다. Assisted inject는 프로그래밍 방식의 매개 변수를 필요로하는 인스턴스를위한 것이며 싱글 톤은 프로그래밍 방식으로 생성되지 않습니다.
모듈의 바인딩에서 asEagerSingleton()
을 호출하지 않는 한, 싱글 톤은 느리게 구성됩니다 (). 그래서 당신은 간단히 C를 B에 주입 할 수 있으며 guice 인젝터가 생성 된 후에 C의 인스턴스가 생성됩니다. C의 생성이 더 복잡하다면, C의 제공자를 생성하여 모듈에 바인딩하십시오.
답해 주셔서 감사합니다. 하지만 제가 말했듯이, 부트 스트랩 전에 C를 생성하는 것은 불가능합니다. C가 Singleton이기는하지만 애플리케이션이 실행될 때만 즉석에서 생성됩니다. – Wudong
부트 스트랩의 의미에 달려 있다고 생각합니다. Guice를 사용하면 모듈이 구성 될 때 프로그래밍 방식으로 제어 할 수 있습니다. 따라서 부트 스타팅이 완료 될 때까지 프로그래밍 방식으로 기다린 다음 B & C 클래스를 다루는 모듈을 구성하십시오. –
AFactory를 도움없이 구식으로 코딩하면 어떨까요? Guice를 사용하여 공장에 주입하지만 수동으로 createA를 구현하십시오. – ollins