scope = request是否适合高负载弹簧应用?

时间:2014-12-26 17:01:54

标签: spring spring-mvc scope named-scope

将单例bean注入请求范围的bean(注入单例范围的bean)是否常见? 例如,像这样:

@Scope(value="request", proxyMode=ScopedProxyMode.INTERFACES)
public class CurrentUser {
    @Resource
    private UserRepository userRepository;
    ...
}

public class ApplicationController {

    @Autowired
    private CurrentUser currentUser;
    ...
}

内存管理的任何管理费用是否可行?这个实现是安全的吗? 谢谢!

1 个答案:

答案 0 :(得分:2)

基本上会发生的事情是每个活动的http请求都会有一个CurrentUser的实例。实例在Spring创建的代理后面进行管理,实例本身作为http请求属性维护,生命周期与此请求相关联。

我想说,就实例化和自动装配每个CurrentUser请求实例而言,这将是代价高昂的。它不应该是昂贵的内存,因为实例是短暂的并且要求范围。关于实例是否是线程安全的,是的。

但是有一个bug,proxyMode必须是ScopedProxyMode.TARGET_CLASS,因为你的CurrentUser类没有实现任何接口。