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