gpt4 book ai didi

java - Spring - 从对象池请求作用域 bean

转载 作者:行者123 更新时间:2023-11-30 02:38:52 25 4
gpt4 key购买 nike

我有一个资源对象池:

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 子句让我感到紧张。我想按如下方式实现 Controller :

@Path("test")
public class TestController {
@Autowired
private PooledResource resource;

@GET
Response get() {
...
}

}

这里,注入(inject)的是PooledResource,而不是管理池。这种注入(inject)应该是请求范围的,并且在请求完成后,资源必须返回到池中。这很重要,否则我们最终会耗尽资源。

这在 Spring 可能吗?我一直在玩FactoryBean,但这似乎不支持回馈bean。

最佳答案

实现一个HandlerInterceptor并用请求范围的bean注入(inject)它。当调用 preHandle 时,使用正确的值设置 bean。当 afterCompletion 被调用时,再次清理它。

请注意,您需要将其与 Bean Factory 结合起来,才能将 PooledResource 注入(inject)到您的其他组件中。

工厂基本上注入(inject)与 HandlerInterceptor 中使用的相同的对象,并创建(或只是返回)一个 PooledResource

关于java - Spring - 从对象池请求作用域 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42339203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com