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,

Другие вопросы по тегам