我有一个资源对象池:
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
,但这似乎不支持回馈bean。