- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在学习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) 上下文究竟代表什么?我认为这就像一组具有特定用途的 bean ,并且可以在环境中协同工作。但我对这个断言绝对不正确。
2) root context 和 dispatcher servlet context 有什么区别?
3) 据我了解,dispatcherContext 中定义的 bean 可以访问 rootContext 中定义的 bean(但反之则不然)。为什么?
Tnx
最佳答案
Spring 应用程序中的根上下文是 ApplicationContext
由 ContextLoaderListener
加载.此上下文应具有全局可用的资源,如服务、存储库、基础设施 bean(DataSource
、EntityManagerFactory
等)等。
ContextLoaderListener
在 ServletContext
中注册此上下文名下org.springframework.web.context.WebApplicationContext.ROOT
.
如果您加载 ApplicationContext
并在 ServletContext
中使用上面的名称注册它然后将有资格作为根上下文。
Spring 应用程序中的子上下文是 ApplicationContext
由 DispatcherServlet
加载(或者例如 Spring-WS 应用程序中的 MessageDispatcherServlet
)。此上下文应仅包含与该上下文相关的 bean,对于 Spring MVC,它将是 ViewResolver
年代,HandlerMapping
等等。
servlet 在 ServletContext
中注册此上下文。名下org.springframework.web.servlet.FrameworkServlet.CONTEXT.<servlet-name>
.
只有子上下文可以访问父上下文,因为您可以有多个子上下文。例如在 Spring MVC 与 Spring WS 应用程序的结合中。子上下文通过在 ServletContext
中查找来检测父上下文。用众所周知的名字。
如果根上下文可以访问子上下文,它将使用哪一个来连接 bean?除此之外,如果是这样的话,当涉及 AOP 时,您也会得到令人惊讶的结果。在子上下文中定义的 AOP 会突然影响在根上下文中配置的 bean。
关于java - 根上下文和调度程序 servlet 上下文到底是如何进入 Spring MVC Web 应用程序的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30639842/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!