java - 如何从 ValueStack 中删除操作?

标签 java spring model-view-controller struts2 valuestack

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

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

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

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

这是我的问题:

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

最佳答案

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

也就是说,我会非常犹豫做出这样的改变;它具有系统范围的影响,并且基本上与 XW/WW/S2 的一切背道而驰。

(不相关,但单例本质并不是定义 Controller ,而是定义组件的职责。)

关于java - 如何从 ValueStack 中删除操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40233771/

相关文章:

java - 当我写入内容时,csv 文件为空

java - Spring - 从现有的 BindingResult 和 Model 构建新的 modelAndView

PHP 模板和外部 CSS

java - 如果您今天开始,您会为一个新的 Web Java 项目使用什么堆栈?

spring security oauth2 java config - 处理程序调度失败;嵌套异常是 java.lang.StackOverflowError

java - Spring Bean 到底是什么?

java - 在 Java 中从 Map 分离 Collection 的最佳方法是什么?

java - 断开连接时重新连接 Java 套接字连接

java - 在 Spring Boot 数据休息应用程序中获取 EntityManager

java - 如何在@Stateless bean中设置@WebMethod的超时值?