У нас есть два одноэлементных объекта (объявленных через in(Scopes.SINGLETON)
) в Guice, каждый из которых использует другой в своем конструкторе. Guice способ реализовать это с помощью прокси - он сначала инициализирует объект с прокси для другого объекта, и только когда этот объект необходим, он разрешается.
При запуске этого кода из нескольких потоков мы получаем следующее исключение:
java.lang.IllegalStateException: This is a proxy used to support
circular references involving constructors. The object we're proxying is not
constructed yet. Please wait until after injection has completed to use this
object.
at
com.google.inject.internal.ConstructionContext$DelegatingInvocationHandler.invoke(ConstructionContext.java:100)
Я предполагаю, что это ошибка в Guice, потому что мы не делаем ничего необычного. Одним из найденных нами обходных путей является ранняя инициализация синглетонов с использованием .asEagerSingleton()
, но это не очень удобно, например, для тестирования.
Является ли это известной проблемой? Сообщается о проблеме с Google Guice , воспроизводимой с помощью автономного теста.
Любые другие предложения / обходные пути?