为什么Spring-MVC将LoadOnStartup设置为1?

问题描述 投票:0回答:3

我想知道为什么要将此值设置为1。我看了api,意思是在这个动态ServletRegistration代表的Servlet上设置loadOnStartup优先级。为什么是1?

我读了一段代码:

public void onStartup(ServletContext servletContext)
            throws ServletException {
        // TODO Auto-generated method stub
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(WebAppConfig.class);
        servletContext.addListener(new ContextLoaderListener(ctx));

        ctx.setServletContext(servletContext);
        Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.addMapping("/");
        servlet.setLoadOnStartup(1);
    }
spring-mvc
3个回答
4
投票

我正在添加这个答案,以防其他人看到这篇文章。 根据文档,这比 1 = true 和 0 = false 更复杂。 该值是定义启动时初始化的应用程序将被调用的顺序的优先级。

ServletRegistration.Dynamic.setLoadOnStartup

这个问题涵盖了这一点。


2
投票

Ahh 1 是 true 的约定。 0 是 false 的约定。您为调度程序 servlet 设置启动时加载,以便 spring 容器将在应用程序服务器(tomcat 等)启动时初始化。


1
投票

启动时设置加载:

void setLoadOnStartup(int loadOnStartup)

设置此动态 ServletRegistration 表示的 Servlet 的

loadOnStartup
优先级。

大于或等于 0 的

loadOnStartup

 值向容器指示 
Servlet
 的初始化优先级。在这种情况下,容器必须在 
Servlet
 的初始化阶段实例化并初始化 
ServletContext
,即在其 
ServletContextListener
 方法调用为 
ServletContext
 配置的所有 
ServletContextListener#contextInitialized
 对象之后.

如果

loadOnStartup

 是负整数,则容器可以自由实例化并延迟初始化 
Servlet

loadOnStartup

的默认值为-1。

对此方法的调用会覆盖之前的任何设置。

Parameters: loadOnStartup - the initialization priority of the Servlet Throws: IllegalStateException - if the ServletContext from which this ServletRegistration was obtained has already been initialized
    
© www.soinside.com 2019 - 2024. All rights reserved.