如何从值堆栈中删除操作?

我正在尝试让我的动作课单身。 关键是要在MVC模式中使动作类成为真正的控制器。 特别是在实现REST控制器时,控制器的范围可以扩展到应用程序的生命周期。 与Spring框架一样,默认情况下控制器被置于默认范围内,Spring中的默认范围是单例。

Struts2也有一个默认范围,它也是单例。 我想将我的动作类放到这个范围,并从值栈中删除它们。

我如何修改Struts2框架以使我的操作像Spring中的控制器一样? 我知道我可以将操作类的管理委托给Spring,但是我不能使用默认范围,并且Struts2容器仍在继续运行。 我无法从框架中删除它,因为它不可插拔。

所以,捎带Spring和Struts2容器我无法使我的动作类单例,因为Struts2实例化它们并放入值栈。 这是我的问题:如果我选择Struts和Spring之间的容器将我的动作类放到默认范围,我怎么能告诉Struts2框架不要把它们放到值栈?

假设您正在使用XWork的DefaultActionInvocation实现,那么它就是通过init方法完成的。 拉出来有点痛苦,因为它在XWork和S2中的动作代理和动作代理工厂下面分层。

那就是说,我会非常犹豫做出这样的改变; 它具有系统范围的影响,并且基本上与XW / WW / S2的所有内容相反。

(不相关,但单身性质不是定义控制器的东西,它是定义组件是什么的责任 。)