我的印象是,Struts中的Collection<MyObj> myObjects = results.values();
方法是从execute()
调用操作类时调用的第一个方法。但是当我调试我在动作类中有构造函数的代码时,我看到构造函数首先被执行(我不是在这里创建任何实例)。
1)有些人可以解释一下动作类中的执行流程,即在实际执行之前调用哪些方法。
2)我不确定为什么构造函数被调用
答案 0 :(得分:0)
Struts在执行操作之前调用了很多东西。但它可以在struts.xml
中配置。您可以从this回答中看到操作执行的请求流。
内部Struts使用
ObjectFactory
来构建所有对象 由配置定义。详细了解ObjectFactory
文档 或The Struts 2 Request Flow。
构造函数应该具有default constructor或no-argument constructor,否则它将无法构建。有关差异的详细说明,请参阅Java default constructor。
你不必为你的班级提供任何建设者,但是你 这样做时一定要小心。编译器自动提供 无参数,没有构造函数的任何类的默认构造函数。 这个默认构造函数将调用的无参数构造函数 超类。在这种情况下,编译器会抱怨如果 超类没有无参数构造函数,所以你必须验证 它确实如此。如果你的类没有明确的超类,那么它有一个 Object的隐式超类,它有一个无参数 构造
在执行操作之前,这些方法主要由拦截器调用。默认拦截器堆栈为defaultStack
。它涉及许多涉及在操作之前执行的功能。请参阅this回答,了解有关默认配置的信息。
在执行操作之前调用拦截器。它就像一个 提供请求的管道。他们每个人都调用了一个 另一个。当最后一个拦截器处理完动作时。 要在操作配置中配置的调用拦截器 通过注释。有关拦截器的详细说明,请参阅docs。