0

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

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

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

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

这是我的问题:

如果我选择 Struts 2 和 Spring 之间的容器将我的动作类置于默认范围内,我怎么能告诉 Struts 2 框架不要将它们置于ValueStack?

4

1 回答 1

3

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

也就是说,我会非常犹豫是否要进行这样的更改;它具有系统范围的影响,并且基本上与 XW/WW/S2的所有内容背道而驰。

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

于 2016-03-07T18:08:31.653 回答