2010-11-22 2 views
6

На моем web.xml у меня есть "SpringMVC" сервлетов декларация (которая имеет соответствующую SpringMVC-servlet.xml)Spring Application Context Load Order

<servlet> 
    <servlet-name>springmvc</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>springmvc</servlet-name> 
    <url-pattern>/myapp/*</url-pattern> 
</servlet-mapping> 

У меня тоже есть свой обычный файл applicationContext.xml.

Какой из них загружается первым? Springmvc-servlet.xml или applicationContext.xml?

Причина, по которой я прошу об этом, всякий раз, когда я помещаю элемент <mvc:annotation-driven/> в applicationContext.xml, я получаю серьезную ошибку контекста. Но когда я помещаю этот элемент в springmvc-servlet.xml, мое веб-приложение работает нормально.

Любые идеи, почему?

В другом веб-приложении у меня есть <mvc:annotation-driven/> внутри applicationContext.xml, и он работает нормально.

Добавление: Я замечаю, что присутствие АОПА: конфигурации создает конфликт с MVC: аннотация приводом

+0

Скопируйте трассировку стека исключений на ваш вопрос. Вы определили xsd для пространства имен mvc в applicationContext.xml? – MarrLiss

+0

Нет трассировки стека. Я получаю типичную ошибку Severe Context от Tomcat. – chris

ответ

0

За исключением web.xml нет предопределенного порядка. Это происходит:

  • web.xml загружается сервлетов, это вызывает нагрузку всех определенных сервлетов, фильтров, слушателей,
  • ContextLoaderListener загружает корневой контекст приложения XML, это может включать в себя определение боба для LocalSessionFactoryBean, вызывая загрузку всех Hibernate отображения XML файлов
  • DispatcherServlet загружает веб-приложение контекст XML

Изучите web.xml чтобы определить порядок в каждом конкретном случае.

Смотри также:

link

+0

В моем web.xml у меня есть только xxxxx-servlet.xml. Я не объявлял никаких других файлов Spring XML. Приложение Context.xml загружается по умолчанию без какой-либо специальной конфигурации. Я не знаю, почему это работает в некоторых приложениях на основе их местоположения. – chris

+0

Я перевариваю эту информацию и в настоящее время тестирую ... Я думаю, что я во что-то вхожу – chris

+0

Хорошо, я рад, что эта информация помогает вам , – Michel

5

applicationContext.xml контекст родителя в dispatcher-servlet.xml контексте. Я не знаю, означает ли это, что это загружено первым, но это не имеет значения в вашем случае:

<mvc:annotation-driven /> должно быть в dispatcher-servlet.xml, так как оно принадлежит к веб-части приложения.

+0

Основываясь на наблюдении, я так не думаю. У меня есть веб-приложение, где находится в applicationContext.xml. На самом деле, если я помещаю в xxxxx-сервлет, я получаю только ошибку SEVERE CONTEXT. Мне нужен этот элемент, потому что мои контроллеры и серверы отмечены с помощью аннотаций @Controller и @Service, соответственно – chris

+0

@chris, как насчет совместного использования точного сообщения и отслеживания исключения сервисов? – Bozho

0

Вы, вероятно, придется добавить MVC пространства имен в контексте приложения:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/mvc 
     http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd" 
> 

(другие пространства имен раздели)

+0

Я уже получил их. Eclipse будет автоматически жаловаться, когда мне не хватает этих схем. – chris

+0

Думал так, но я просто проверял, для полноты. –

3

Я решить мою проблему!

Оказалось, что это не имеет никакого отношения к заказу на загрузку или где объявлен <mvc:annotation-driven/>.

Я попытался развернуть мое веб-приложение на другом Tomcat, и к моему удивлению, в журнале локального хоста есть трассировка стека. У меня был намек проб и ошибок, что конфликт с <aop:config/>. Но какой именно конфликт?

Потом я увидел эту ошибку в файле журнала:

java.lang.ClassCastException: org.aspectj.weaver.ResolvedType$Array cannot be cast to org.aspectj.weaver.ReferenceType 

Итак, мы имеем исключение произнесения. Я искал ту точную ошибку выше и нашел это: Spring 3: adding causes ClassCastException

Появляется стартер потока, и у меня такая же точная проблема. Поэтому я загрузил aspectj-1.6.10.jar, но я все еще отсутствовал в классе. Затем выясняется, что это должно быть aspectjweaver-1.6.9

Я все еще пользовался очень старым аспектом. У него не было никакой версии на свое имя. Задача решена. Дело закрыто.

Кстати в качестве бонуса, я вручную развернул <mvc:annotation-driven/> элемент в эквивалентной декларации XML:

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> 
    <property name="order" value="0" /> 
</bean> 

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
    <property name="webBindingInitializer"> 
     <bean class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer"> 
      <property name="validator" ref="validator" /> 
     </bean> 
    </property> 
    <property name="messageConverters"> 
     <list> 
      <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.FormHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.xml.SourceHttpMessageConverter" /> 
      <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" /> 
     </list> 
    </property> 
</bean> 

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 
<bean id="conversion-service" class="org.springframework.format.support.FormattingConversionServiceFactoryBean" /> 

Они точно так же, когда вы объявляете <mvc:annotation-driven/> на основе того, что я исследовал ,

Спасибо всем, кто помог мне.

 Смежные вопросы

  • Нет связанных вопросов^_^