簡體   English   中英

Spring MVC Web應用程序中的根上下文和分派器servlet上下文到底如何?

[英]How exactly are the root context and the dispatcher servlet context into a Spring MVC web application?

我正在學習Spring MVC ,所以我有一些疑問

因此,我有一個配置類,用於配置處理用戶請求的DispatcherServlet

public class MyWebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) {

        // Create the 'root' Spring application context
        AnnotationConfigWebApplicationContext rootContext = ...
        // Create the dispatcher servlet's Spring application context
        AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();

       dispatcherContext.register(DispatcherConfig.class);

       // Register and map the dispatcher servlet
       ServletRegistration.Dynamic dispatcher = container.addServlet("main", new DispatcherServlet(dispatcherContext));
       dispatcher.setLoadOnStartup(1);
       dispatcher.addMapping("main/");
   }
}

我很清楚DispatcherServlet的工作方式。 我的懷疑與上下文概念有關。

1)確切地表示上下文 我認為這就像一組具有特定用途的豆類,可以在環境中工作。 但是我絕對不是這個主張。

2) 根上下文調度程序servlet上下文有什么區別?

3)據我了解,在dispatcherContext中定義的bean可以訪問在rootContext中定義的bean (但事實並非如此)。 為什么?

特納克斯

根上下文

Spring應用程序中的根上下文是ContextLoaderListener加載的ApplicationContext 此上下文應具有全局可用的資源,例如服務,存儲庫,基礎結構Bean( DataSourceEntityManagerFactory等)等。

ContextLoaderListener將此上下文以org.springframework.web.context.WebApplicationContext.ROOT的名稱注冊到ServletContext

如果您自己加載ApplicationContext並在ServletContext中使用上面的名稱注冊它,則該名稱將成為根上下文。

子語境

Spring應用程序中的子上下文是由DispatcherServlet (或例如Spring-WS應用程序中的MessageDispatcherServlet )加載的ApplicationContext 對於Spring MVC,此上下文應僅包含與該上下文相關的bean,例如ViewResolverHandlerMapping等等。

servlet在ServletContext中以org.springframework.web.servlet.FrameworkServlet.CONTEXT.<servlet-name>名稱注冊此上下文。

根<兒童關系

只有子上下文可以訪問父上下文,因為您可以擁有多個子上下文。 例如,在結合了Spring WS應用程序的Spring MVC中。 子上下文可以通過在ServletContext以眾所周知的名稱找到父上下文來檢測它們。

如果根上下文可以訪問該子項,那么它將使用哪個來關聯bean? 如果是這種情況,那么接下來,當涉及AOP時,您還將得到令人驚訝的結果。 在子上下文中定義的AOP會突然影響在根上下文中配置的Bean。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM