如果您使用与Spring相关的servlet过滤器,并且还使用mvc控制器,那么您将同时需要:
- ContextLoaderListener与
- DispatcherServlet-spring-configuration
两者都创建自己的servlet上下文。ContextLoaderListener创建 父上下文
(有时称为内部上下文)。而DispatcherServlet的创建 子上下文
(父上下文)(有时也称为外上下文)。子上下文的Bean可以访问父上下文的Bean,但反之则不能。
在不太简单的Web应用程序中,您需要两个上下文,因为有许多servlet过滤器需要一个已经创建的spring上下文。另一方面,所有控制器内容都需要ServletContext,而这仅是由Dispatcher
Servlet创建的。
另一点是,您不应该将每个bean都创建两次(有时这没问题,而有时则是)。因此,您需要具有两种弹簧配置,一种用于内部环境,一种用于其他环境。而且,您需要为每个bean决定它是属于内部上下文还是属于外部上下文。
经验法则是:将所有内容放入内部上下文中,除非需要Servlet上下文或与Web前端紧密相关的内容,例如MVC-Controllers,Tiles配置等。



