作为Spring mvc设计在一个标准的servlet,并且促进servlet上下文和应用程序上下文相同的功能.在春天有两种类型的上下文ApplicationContext和WebApplicationContext-
ApplicationContext由ContextLoaderListener初始化,每个应用程序单个instanse.
每个DispatcherServlet加载的WebApplicationContext.
我们可以在上面看到这样的ApplicationContext扩展的WebApplicationContext,所以有什么东西与ApplicationContext相关的最后这是WebApplicationContext的一部分.
疑惑
> ApplicationContextAware提供哪个上下文对象.
public class SomeThing implements ApplicationContextAware{ @Override public void setApplicationContext(ApplicationContext ctx) throws BeanException{ //this context object is `ApplicationContext` or `WebApplicationContext`? } }
>上下文和容器似乎是我们大多数人的同义词,我想
给出一个例子.说我们有两个调度器servlet一个
休息等为mvc.
第一个调度员 –
public class RestInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected String[] getServletMappings() { return new String[] { "/rest/*" }; } }
第二调度员 –
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected String[] getServletMappings() { return new String[] { "/mvc/*" }; } }
比这里有两个WebApplicationContext的实例,那些
公共部分由ContextLoaderListner加载为定义
rootContext.
我不确定,但在一个SpringApplication中不能有2个IocContainer.
> beanfactory即SpringIocContainer是,其中所有的bean对象
生活,我们与WebApplicationContext相关联的对象是什么
Spring容器的一部分,这个容器是如何初始化的
WebApplicationContext?我想知道他们是如何做到的
相互关联?
每当我们做ctx.getBean() – 这会从spring返回对象
容器,上下文和容器之间的这种通信如何
发生?
有一个类似的answer,否认这两者都是一样的,它说
Spring comes with several container implementations,Both load bean definitions,wire beans together,and dispense beans upon request,but an ApplicationContext offers much more.
所以我的观点就是为什么两个加载bean的定义,一起是一起的,这是一种返工?
即使网络应用程序是弹簧驱动的,还有一件事情,在Http通信中必须有一个标准servlet提供和使用的上下文
Spring遵循这一点,或者Spring以其他方式处理这个问题.而在spring context中,这意味着只有一个IOC容器,其中一部分由DispacherServlet加载,一部分由ContextLoaderListner加载,并且可以方便更多的诸如I18N,访问静态资源等等..
解决方法
在spring应用程序中有一个单独的上下文实例,它是每个DispatcherServlet的WebAplicationCntext.它可以被一个超级接口ApplicationContext-
public class SomeThing implements ApplicationContextAware{ @Override public void setApplicationContext(ApplicationContext ctx) throws BeanException{ //this context object is `WebApplicationContext` which is refer by `ApplicationContext`. } }
在春天,上下文意味着只有一个IOC容器,一些部分由ContextLoaderListner加载,并且可以促进更多的诸如I18N,访问静态资源等
您以上的理解几乎是正确的.在Spring中所有的WebApplicationContext对象共享一些常见的引用,即RootContext.
这个答案不包括question2,doubt3的答案,以及为什么所有的上下文都执行相同的任务.