AnnotationSessionFactoryBean и синглтонная область действия (Spring Framework) - PullRequest
0 голосов
/ 13 мая 2010

Я определяю компонент типа AnnotationSessionFactoryBean для использования в веб-приложении.

Если я явно не определяю его как НЕ одноэлементный, он должен быть одноэлементным.

Теперь он привязан к текущему потоку.

Это означает, что это не может быть одиночка.

p.s. Сессия, производимая Factory, не является одноэлементной, а SessionFactory всегда является одноэлементной. Теперь все ясно!

Ответы [ 2 ]

2 голосов
/ 13 мая 2010

AnnotationSessionFactoryBean (его суперкласс) определяет метод isSingleton(), который возвращает true. Таким образом, SessionFactory, возвращаемый этим фабричным компонентом , является синглтоном.

С другой стороны, Session, который производит SessionFactory, может быть связан с потоком.

Итак, у вас есть:

BeanFactory creates SessionFactory creates Session
1 голос
/ 13 мая 2010

Суперкласс AnnotationSessionFactoryBean с именем LocalSessionFactoryBean имеет несколько ThreadLocal<?> статических полей:

private static final ThreadLocal<DataSource> configTimeDataSourceHolder =
        new ThreadLocal<DataSource>();

private static final ThreadLocal<TransactionManager> configTimeTransactionManagerHolder =
        new ThreadLocal<TransactionManager>();

private static final ThreadLocal<Object> configTimeRegionFactoryHolder =
        new ThreadLocal<Object>();

private static final ThreadLocal<CacheProvider> configTimeCacheProviderHolder =
        new ThreadLocal<CacheProvider>();

private static final ThreadLocal<LobHandler> configTimeLobHandlerHolder =
        new ThreadLocal<LobHandler>();

Таким образом, даже один экземпляр этого компонента может взаимодействовать по-разному в разных потоках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...