Пружина 3 <mvc: interceptors> несовершенна? - PullRequest
3 голосов
/ 22 сентября 2011

У меня есть приложение Spring 2.5.x, которое я перевожу на Spring 3 и столкнулось с небольшой проблемой.

У меня есть обработчик отображения так:

<bean id="handlerMappings1" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="interceptor1" />
            <ref bean="interceptor2" />
            ....
            <ref bean="interceptorN" />
        </list>
    </property>
    <property name="urlMap">
        <map>
            <entry key="/url1.html" value-ref="controller1" />
            <entry key="/url2.html" value-ref="controller2" />
            ....
            <entry key="/url100.html" value-ref="controller100" />
        </map>
    </property>
</bean>

и еще один такой:

   <bean id="handlerMappings2" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="urlMap">
            <map>
                <entry key="/urlA.html" value-ref="controllerA" />
                <entry key="/urlB.html" value-ref="controllerB" />
                ....
                <entry key="/urlN.html" value-ref="controllerN" />
            </map>
        </property>
    </bean>

Я медленно заменяю оба аннотации @RequestMapping на <context:component-scan> (который в основном регистрирует DefaultAnnotationHandlerMapping).

Весной 3 я увидел тег <mvc:interceptors>, который можно использовать для добавления перехватчиков к определенным URL-адресам, но вы можете указать только один перехватчик, по крайней мере это то, что я вижу из схемы .

Из того, что я могу понять, я должен зарегистрировать один из них для каждого перехватчика, который будет дублировать все мои URL столько раз, сколько у меня есть перехватчики (и я даже не знаю, в каком порядке они будут работать).

С другой стороны, я не могу добавить итерцепторы на DefaultAnnotationHandlerMapping, потому что они будут работать для всех моих контроллеров, помеченных @RequestMapping, а я этого не хочу.

Так как я могу указать перехватчики Spring 3 для некоторых URL, без повторения URL и сохранить URL-адрес для сопоставления контроллера на основе аннотации @RequestMapping?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2011

Вы можете взглянуть на классы SelectedAnnotationHandlerMapping и IgnoreSelectedAnnotationHandlerMapping из проекта springplugins . Источникам несколько лет, но идея остается в силе.

В блоге создателя есть презентация: Spring Framework Конфигурация перехватчика контроллера на основе аннотаций . Обязательно прочитайте также комментарии к сообщению в блоге.

0 голосов
/ 22 сентября 2011

Один из вариантов - создать пользовательский перехватчик, который может делегировать коллекцию введенных перехватчиков.

...