最新消息:文章中包含代码时,请遵守代码高亮规范!

SpringMVC——Servlet容器启动时初始化SpringMVC应用的原理 【转载】

Java sunshine 141浏览 0评论

下面这篇文章希望可以使学习java的小伙伴理解其原理:

在 Servlet 3.0标准中含有一个 ServletContainerInitializer接口,所有实现了这个接口的类会在容器启动的时候得到一个通知,并且会调用其 onStartup()方法,这个接口非常简单,只有一个 onStratup()方法

public interface ServletContainerInitializer {
 
    void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException;
}

 

Spring中提供了一个 SpringServletContainerInitializer类,实现了这个接口

@HandlesTypes(WebApplicationInitializer.class)
public class SpringServletContainerInitializer implements ServletContainerInitializer {
 
    @Override
    public void onStartup(Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
            throws ServletException {
 
        // logic
    }
}

此处代码省略了onStratup()方法中的逻辑。可以看到Spring中的这个类实现了 ServletContainerInitializer接口,并且这个类使用了一个 @HandlesTypes注解进行标注,这个注解也是源自于Servlet规范中,它接受一个WebApplicationInitializer类型作为参数。这表示,当容器启动时,会到应用程序中搜索所有实现或继承了 WebApplicationInitializer类型的类,并且将这些类作为参数传递给 SpringServletContainerInitializer.onStratup()方法

而在SpringServletContainerInitializer.onStratup()的逻辑中,会调用所有被传入的 WebApplicationItializer类型的 onStartup()方法。

根据上面的类继承体系,应该能够很明确的看出来,我们在配置SpringMVC时所编写的初始化类都是继承自 AbstractAnnotationConfigDispatcherServletInitializer类,它会继承父类的 onStartup()方法,同样的我们的配置类也就继承了父类的onStartup()方法,当容器启动时,就会调用这个 onStartup()方法。

而为了简化配置,父类中实现了一系列的配置方法,都会在 onStartup()方法中进行调用,因此我们在编写自己的初始化类时,只需要重写相应的配置方法即可。

因此想要知道SpringMVC初始化有哪些可以配置的项,只需要查看这个类继承体系中提供了哪些配置功能的接口即可。

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/24456.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者sunshine的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!