私は勉強しています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がどのように機能するかは、私にはかなり明らかです。私の疑問はcontextコンセプトに関連しています。
1)contextを正確に表すものは何ですか?それは、特定の目的を持った豆のセットのようなもので、環境に合わせて機能するものだと思います。しかし、私はこの主張については絶対に真実ではありません。
2)ルートコンテキストとディスパッチャーサーブレットコンテキストの違いは何ですか?
3)dispatcherContextで定義されているBeanが私が理解していることから、rootContextで定義されているBeanにアクセスできます(ただし、その逆は当てはまりません)。どうして?
Tnx
Springアプリケーションのルートコンテキストは、ApplicationContext
によってロードされるContextLoaderListener
です。このコンテキストには、サービス、リポジトリ、インフラストラクチャBean(DataSource
、EntityManagerFactory
sなど)などのグローバルに利用可能なリソースが必要です。
ContextLoaderListener
は、このコンテキストをServletContext
にorg.springframework.web.context.WebApplicationContext.ROOT
という名前で登録します。
ApplicationContext
を自分でロードし、それを上記の名前でServletContext
に登録すると、ルートコンテキストとして機能します。
Springアプリケーションの子コンテキストは、ApplicationContext
によって読み込まれるDispatcherServlet
です(たとえば、Spring-WSアプリケーションのMessageDispatcherServlet
)。このコンテキストには、ViewResolver
s、HandlerMapping
sなどのSpring MVCの場合、そのコンテキストに関連するBeanのみを含める必要があります。
サーブレットは、このコンテキストをServletContext
にorg.springframework.web.servlet.FrameworkServlet.CONTEXT.<servlet-name>
という名前で登録します。
複数の子コンテキストを作成できるため、親コンテキストにアクセスできるのは子コンテキストのみです。たとえば、Spring WSアプリケーションと組み合わせたSpring MVCで。親コンテキストは、よく知られている名前のServletContext
で見つけることにより、子供によって検出されます。
ルートコンテキストが子にアクセスできる場合、Beanをワイヤリングするためにどのコンテキストを使用しますか?その隣にある場合は、AOPが関係しているときにも驚くべき結果が得られます。子コンテキストで定義されたAOPは、ルートコンテキストで構成されたBeanに突然影響します。