我应该为有状态(?)@Service 选择哪个 @Scope

Which @Scope should I choose for a stateful(?) @Service

我是 Spring 的新手。

我正在做一个依赖于 spring-context 的图书馆项目。

@Scope(value = "@@?")
@Service
public class MyService {

    @PostConstruct private void constructed() {
    }

    @PreDestroying private void destroying() {
        resource.clear();
    }

    public void doSome() throws IOException {
        // try{}finally{} is not the case
        resource = getSome();
        doSome(resource); // may throw an IOException
        resource.clear();
    }

    private transient MyResource resource;
}

我想在每次销毁此实例时释放 resource

根据@Scope,我可以选择四个选项。

我发现 WebApplicationContext 在我的依赖树中不可用。 (我不依赖spring-webmvc

我打算选择ConfigurableBeanFactory.SCOPE_PROTOTYPE

我选择的范围是否真的会使 MyService 安全?我的意思是任何两个或多个客户端都不能注入同一个服务实例? Spring 容器会处理它吗?

事实上,RequestSessionGlobal-sessionApplication 范围仅在 Web 感知应用程序上下文中可用。

Singleton(单个实例 per Spring 容器)是 Spring 使用的默认作用域,因此使用原型作用域将保证将创建新实例并将其返回给客户端,因此在这种情况下,是的 Prototype 就是您所需要的。