2013-05-23 3 views
1

Это, вероятно, простой вопрос, но я с некоторым трудом понимаю, как Spring MVC обрабатывает множественные hiearchies, которые часто присутствуют в приложении MVC.Spring MVC Context Hiearchy

В моей web.xml у меня есть контекст, определенный как я понимаю, что это Корневой контекст

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
    /WEB-INF/spring/root-context.xml 
    </param-value> 
</context-param> 

Я также контекст, определенный на уровне сервлета, который я понимаю, должен наследовать из корневого контекста выше.

<servlet> 
     <servlet-name>appServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
</servlet> 

Для того, чтобы сделать мое приложение работает У меня есть следующие в корневой context.xml

<context:component-scan base-package="com.demo.service" /> 

и следующее в сервлет-context.xml

<annotation-driven /> 
<context:component-scan base-package="com.demo.controller" /> 

Мой вопрос это, если я изменяю проверку компонентов на следующие в корневом контексте и удаляю проверку компонентов из контекста сервлета, почему приложение отказывается загружать?

<context:component-scan base-package="com.demo" /> 

Annotation-specified bean name 'adminController' for bean class [com.demo.controller.AdminController] conflicts with existing, non-compatible bean definition of same name 

ответ

0

, потому что сервлет-контекст не найти какой-либо контроллер, корень-контекст и сервлетов контекст загружаются отдельно

+0

Я думал, что контекст сервлета является потомком корневого контекста и может увидеть что-либо определить там. Он, безусловно, может видеть мои классы обслуживания, daos и т. Д., В противном случае аутоустановка потерпит неудачу. – jeffe

+0

Да, но корневой контекст не позволяет аннотировать сканирование (@controller, @RequestMapping ...). ищет эти аннотации в текущем сканировании компонентов –