У меня есть Spring CommonsPoolTargetSource
, определенный для бобов. Я пытаюсь понять, как работает пул, и когда объект возвращается в пул.
В частности, если у меня есть работник, который берет объединенный объект и вызывает два метода для него, как показано ниже:
public class MyWorker {
@Resource
Foo pooledFoo;
void doWork()
{
pooledFoo.doStepA();
pooledFoo.doStepB();
}
}
Из того, что я вижу в тестах, которые я запускал, pooledFoo
на самом деле не экземпляр Foo
, а прокси, предоставляемый пулом. Поток в вышеупомянутом будет:
- Вызов doStepA () для
foo
извлекает значение из пула (блокирует поток, если он недоступен),
- doStepA выполняется на pooledFoo
- после завершения doStepA экземпляр
pooledFoo
возвращается в пул
- управление возвращается к методу
doWork
, и метод продолжается
Если это правильно (скажите, пожалуйста, если это не так), можно ли предположить, что pooledFoo
, возвращенный из пула при вызове doStepB()
, не будет тем же экземпляром, который был возвращен для doStepA()