擴(kuò)展AbstractAnnotationConfigDispatcherServletInitializer的任意類都會(huì)自動(dòng)配置DispatcherServlet和Spring應(yīng)用上下文,Spring應(yīng)用上下文會(huì)位于應(yīng)用程序的servlet上下文中。

首先可以看出,AbstractAnnotationConfigDispatcherServletInitializer是一個(gè)抽象類,且繼承了AbstractDispatcherServletInitializer類。它還有一個(gè)無參的構(gòu)造方法。
其次它里面有方法可以返回WebApplicationContext的對(duì)象。所以說,實(shí)現(xiàn)這個(gè)類,反過來會(huì)查找實(shí)現(xiàn)WebApplicationContext的類并將配置的任務(wù)交給他們來完成。
其中方法createRootApplicationContext和createServletApplicationContext都是用來創(chuàng)建程序的引用上下文,只不過一個(gè)是Root的一個(gè)是servlet的。對(duì)于獲取到的配置類型信息數(shù)組做出判斷,如果不為null,則調(diào)用AnnotationConfigWebApplicationContext類的register方法進(jìn)行注冊(cè)。
其中g(shù)etServletConfigClasses()方法返回帶有@Configuration注解的類將會(huì)用來定義DispatcherServlet應(yīng)用上下文中的bean。getRootConfigClasses()方法返回帶有@Configuration注解的類將會(huì)用來配置ContextClassLoaderListener創(chuàng)建的應(yīng)用的上下文。

并且調(diào)用Arrays工具類的asList方法將配置類型信息數(shù)組轉(zhuǎn)為L(zhǎng)ist,具體的數(shù)據(jù)結(jié)構(gòu)如下所示:

到此,我們就簡(jiǎn)單的了解了一下AbstractAnnotationConfigDispatcherServletInitializer