如果要使用Spring MVC,则肯定需要了解Spring MVC的ApplicationContext层次结构。你还应该了解servlet容器中的基本组件和生命周期,因为你似乎也对侦听器和servlet的工作方式感到困惑。
简要说明你的情况:
- 你正在创建两个ApplicationContext:根上下文和DispatcherServlet上下文。根上下文是由ContextLoaderListener基于contextConfigLocation中命名的文件创建的。该上下文旨在包含构成应用程序核心逻辑的bean。当该Servlet启动时将创建DispatcherServlet上下文,该上下文基于名为“ webapp-servlet.xml”的文件。该上下文旨在包含所有支持与其关联的DispatcherServlet实例的bean,并且其中仅应包含与视图相关的bean。
- DispatcherServlet上下文成为根上下文的子级。这样就可以将根上下文中的核心bean注入到视图层bean中。可见性是单向的。视图层bean对核心bean不可用,这是理想的。这就是为什么你的DAO无法注入到身份验证提供程序中的原因。DAO是在子上下文中。
- 基于注释的服务仅适用于声明它们的上下文。如果@Autowired不适用于特定的bean,那是因为你尚未声明该
bean <context:component-scan/>
或<context:annotation-config/>
在该bean存在的上下文中。



