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

时间:2015-02-07 08:52:41

标签: spring scope

我是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容器会处理它吗?

1 个答案:

答案 0 :(得分:1)

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

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