Java ServletContextListener执行顺序

Java ServletContextListener执行顺序,java,servlets,servletcontextlistener,Java,Servlets,Servletcontextlistener,如果我有多个ServletContextListener,其中一些在部署描述符中声明,另一些在注释(@WebListener)中声明,如何定义ServletContextListener在应用程序初始化时的执行顺序 如果要按特定顺序执行侦听器,则应使用部署描述符来定义它们 以下陈述摘自: 8.2.3: 如果侦听器、servlet和过滤器的调用顺序对应用程序很重要,则必须使用部署描述符。当使用注释定义侦听器、servlet和过滤器时,调用它们的顺序是未指定的 排序将基于描述符中定义的顺序以及web

如果我有多个ServletContextListener,其中一些在部署描述符中声明,另一些在注释(@WebListener)中声明,如何定义ServletContextListener在应用程序初始化时的执行顺序

如果要按特定顺序执行侦听器,则应使用部署描述符来定义它们

以下陈述摘自:

8.2.3

如果侦听器、servlet和过滤器的调用顺序对应用程序很重要,则必须使用部署描述符。当使用注释定义侦听器、servlet和过滤器时,调用它们的顺序是未指定的

排序将基于描述符中定义的顺序以及
web.xml
中的绝对排序元素或
web fragment.xml
中的排序元素

在此版本的规范(Java)之前™ Servlet 规范,版本3),上下文侦听器被随机调用 秩序。从Servlet3.0开始,侦听器按照 它们在web.xml中声明

javax.servlet.ServletContextListener的实现在其
contextInitialized
方法中按声明顺序调用,在其
contextDestroyed
方法中按相反顺序调用

如果您有多个ServletContextListener,其中一些是在部署描述符中声明的,另一些是带有注释的,那么将获得优先级的是
web.xml
中定义的侦听器。以下语句复制自servlet规范的同一节(8.2.3):

在main web.xml或web片段中指定的配置优先于通过注释指定的配置


似乎您知道执行顺序,但您想知道如果一些侦听器在部署描述符中声明,而一些侦听器使用注释,那么首选项将由部署描述符和注释来确定


请注意,所有侦听器的构造函数将首先按部署描述符的顺序调用,然后按注释的顺序调用,然后按相同的顺序调用生命周期方法。

首选项由部署描述符调用,然后注释规范引用为a+1。@Debojit+1表示上下文执行的相反顺序。