将单例bean注入请求范围的bean(注入单例范围的bean)是否常见? 例如,像这样:
@Scope(value="request", proxyMode=ScopedProxyMode.INTERFACES)
public class CurrentUser {
@Resource
private UserRepository userRepository;
...
}
public class ApplicationController {
@Autowired
private CurrentUser currentUser;
...
}
内存管理的任何管理费用是否可行?这个实现是安全的吗? 谢谢!
答案 0 :(得分:2)
基本上会发生的事情是每个活动的http请求都会有一个CurrentUser
的实例。实例在Spring创建的代理后面进行管理,实例本身作为http请求属性维护,生命周期与此请求相关联。
我想说,就实例化和自动装配每个CurrentUser
请求实例而言,这将是代价高昂的。它不应该是昂贵的内存,因为实例是短暂的并且要求范围。关于实例是否是线程安全的,是的。
但是有一个bug,proxyMode必须是ScopedProxyMode.TARGET_CLASS
,因为你的CurrentUser
类没有实现任何接口。