Кажется, что все готовые реализации Scope от Guice изначально основаны на потоках (или полностью игнорируют потоки):
Scopes.SINGLETON
и Scopes.NO_SCOPE
игнорируют потоки и являются крайними случаями: глобальная область и без области.
ServletScopes.REQUEST
и ServletScopes.SESSION
в конечном итоге зависят от извлечения объектов с областью действия из ThreadLocal<Context>
. Полученный Context
содержит ссылку на HttpServletRequest
, которая содержит ссылку на объекты области действия, хранящиеся как именованные атрибуты (где имя происходит от com.google.inject.Key
).
Класс SimpleScope
из пользовательской области Вики Guice также предоставляют реализацию для каждого потока, используя переменную-член ThreadLocal<Map<Key<?>, Object>>
.
С этой преамбулой мой вопрос заключается в следующем: как можно создать область, не основанную на потоках? Кажется, что-то, что я могу использовать для поиска Map<Key<?>, Object>
, отсутствует, так как единственные вещи, переданные в Scope.scope()
, это Key<T>
и Provider<T>
.
Заранее спасибо за ваше время.