Spring MVC 3.1.0 ошибка?После обновления контроллеры больше не определяются автоматически - PullRequest
2 голосов
/ 29 декабря 2011

Я пишу веб-приложение, которое использует Spring MVC для связывания bean-компонентов Spring с REST-подобными каналами.

Я создал базовую конфигурацию как в моих предыдущих приложениях (конфигурация в чистом XML), так и в примере, в котором использовалась функция <mvc:annotation-driven/>. Я указываю пакет с контроллерами с <context:component-scan base-package="my.package"/> в весеннем XML-файле.

Работает - в Spring 3.0.6.RELEASE . Однако после обновления до 3.1.0.RELEASE мои контроллеры перестали обнаруживаться, и ни один канал не был зарегистрирован. Контекст Spring не содержит реализации интерфейса HelloChannel.

Это ошибка в этой версии Spring, или я использую устаревшую конфигурацию, которая перестала поддерживаться в более новой версии? У меня нет ошибок или предупреждений, просто бин не определяется автоматически.

Определение интерфейса контроллера выглядит так:

@RequestMapping("/config") public interface ConfigChannel

И реализация:

@Controller
public class ConfigChannelImpl implements ConfigChannel

1 Ответ

2 голосов
/ 29 декабря 2011

В документации Spring указано, что основанные на интерфейсе @Controller s предназначены для проксирования транзакционных методов. Таким образом, вы, вероятно, используете тег <tx:annotation-driven />. Похоже, проблема, с которой вы столкнулись, состоит в том, что в Spring 3.1 появилась поддержка CGLIB, основанного на времени выполнения манипулятора байт-кода. Вам необходимо добавить proxy-target-class="true" в конфигурацию транзакции и добавить CGLIB в ваш путь к классам.

<tx:annotation-driven proxy-target-class="true" />

С http://static.springsource.org/spring/docs/3.1.0.M1/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping

...