Spring - запрос bean-объекта scoped из пула объектов
У меня есть объектный пул ресурсов:
public interface PooledResource {
...
}
@Component
public class ResourcePool {
public PooledResource take() { ... }
public void give(final PooledResource resource) { ... }
}
В настоящее время я использую этот пул следующим образом в моих конечных точках JAX-RS:
@Path("test")
public class TestController {
@Autowired
private ResourcePool pool;
@GET
Response get() {
final PooledResource resource = pool.take();
try {
...
}
finally {
pool.give(resource);
}
}
}
Это отлично работает. Однако, запрашивая PooledResource
вручную и быть вынужденным не забыть finally
пункт заставляет меня нервничать. Я хотел бы реализовать контроллер следующим образом:
@Path("test")
public class TestController {
@Autowired
private PooledResource resource;
@GET
Response get() {
...
}
}
Здесь PooledResource
вводится, а не управляющий пул. Эта инъекция должна быть ограничена запросом, а также, после завершения запроса, ресурс должен быть возвращен пулу. Это важно, иначе у нас закончатся ресурсы.
Это возможно весной? Я играл с FactoryBean
, но это, кажется, не поддерживает возвращение боба.
1 ответ
Реализовать HandlerInterceptor
и внедрить его с запросом bean-объекта. когда preHandle
называется, установите бин с правильным значением. когда afterCompletion
называется, почисти еще раз.
Обратите внимание, что вам нужно будет объединить это с Bean Factory, чтобы получить хороший PooledResource
впрыск в ваши другие компоненты.
Фабрика в основном внедряет тот же объект, который вы использовали в HandlerInterceptor
и создает (или просто возвращает) PooledResource
,