这个问题有点长,因为它是概念性的.我希望这不是一个糟糕的读:)
我正在使用性能关键的Spring MVC/Tiles web-app(10,000个用户典型负载).我们加载更新员工屏幕,我们在其中加载员工详细信息屏幕(绑定到员工业务对象)以通过MultiActionController进行更新.此屏幕上有多个选项卡,但只有tab1具有可更新数据.其余的标签是只读的东西,基本上可供参考.
不用说,我们决定以懒惰的方式加载这些只读选项卡,即,当每个选项卡被激活时,我们触发ajax调用(一次性)以从服务器获取数据.我们不会通过更新视图加载方法加载所有内容.请记住:这是一次只读数据.
现在,我处于两难境地.我已经创建了另一个多路动作控制器,名为"AjaxController"来处理这些ajax调用.现在,我的问题:
思考:如果我让它请求作用域,那么10,000个用户一起可以创建10,000个这个bean的实例:内存问题.如果我将其作为会话范围,那么将为每个用户会话创建一个.这意味着,当10,000个用户登录到应用程序时,无论他们是否使用AjaxController方法,他们都将拥有一个bean.
想法:弹簧靴时会创建一个单独的bean,这个实例将在整个过程中提供.听起来不错.
思考:在这种情况下,是否可以在静态方法上与语境冲突?例如:scope ="session"/"request"+静态方法有意义吗?我问,因为即使每个用户会话都有自己的AjaxController bean,处理程序方法实际上附加到类,而不是实例.另外,scope ="singleton"+静态处理程序方法是否有意义?
想法:如果我控制创作怎么办:基本上做GoF单身.然后范围规范可以做什么?范围会话/请求肯定无法创建多个实例吗?
我糊涂了.我基本上只需要一个控制器bean的单个实例来为所有客户端提供所有请求.
重要说明:AjaxController bean在其他任何地方都不是INJECTED,它是隔离的.它的方法是通过ajax调用命中的.