为什么 Open AI 从我们的贡献中获利? 我删除了这个问题,以抗议 SO 与 Open AI 合作的决定
如果您想按特定顺序执行侦听器,您应该使用部署描述符来定义它们。
以下语句摘自Servlet规范:
8.2.3:
如果调用侦听器、servlet、过滤器的顺序对应用程序很重要,则必须使用部署描述符。当使用注解定义监听器、servlet 和过滤器时,它们的调用顺序是未指定的。
排序将基于它们在描述符中定义的顺序以及
中的绝对排序元素或web.xml
中的排序元素。web-fragment.xml
在此版本规范之前(Java™ Servlet 规范,版本 3),随机调用上下文侦听器 命令。从 Servlet 3.0 开始,侦听器按以下顺序调用 它们在 web.xml 中声明。
的实现按照其声明顺序在其javax.servlet.ServletContextListener
方法中调用,并在其contextInitialized
方法中按相反顺序调用。contextDestroyed
如果您有多个 ServletContextListener,并且其中一些在部署描述符中声明,另一些带有注释,则
web.xml
中定义的侦听器将获得优先级。下面的语句是从 servlet 规范的同一部分 (8.2.3) 复制的:
主 web.xml 或 Web 片段中指定的配置优先于通过注释指定的配置。
您似乎知道执行顺序,但您想知道如果在部署描述符中声明一些侦听器而使用注释声明一些侦听器,那么会先通过部署描述符然后再通过注释来确定首选项。
请注意,所有侦听器的构造函数将按照部署描述符和注释的顺序首先调用,然后按相同顺序调用生命周期方法。