如何从 ValueStack 中删除操作?

How to remove actions from the ValueStack?

我正在尝试使我的操作 类 成为单例。重点是在 MVC 模式中制作动作 类 真正的 控制器。特别是在实现 REST 控制器时,控制器的范围可以扩展到应用程序的生命周期。就像在 Spring 框架中一样,控制器默认放在默认范围内,Spring 中的默认范围是单例。

Struts 2也有默认作用域,也是单例。我想将我的操作 类 放入此范围并将它们从值堆栈中删除。

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

因此,在 Spring 和 Struts2 容器中走动我无法使我的操作 类 单例,因为 Struts 2 实例化并将它们放入 ValueStack.

这是我的问题:

如果我选择 Struts 2 和 Spring 之间的容器将我的操作 类 放入默认范围,我怎么能告诉 Struts 2 框架不要放他们到 ValueStack?

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

就是说,我会 非常 对进行这样的更改犹豫不决;它具有系统范围的影响,并且与 关于 XW/WW/S2.

的一切 本质上相反

(不相关,但定义控制器的不是单例性质,而是定义组件的职责。)