Кто-нибудь знает, почему, по-видимому, невозможно использовать AOP с аннотированными MVC-контроллерами? (см. Сообщение). У меня есть @Controller, который перестает работать, как только я добавляю pointcut к нему. Проблема заключается не в том, что перехватчик не вызывается, а в @Controller просто перестает работать (в журнале вы можете видеть, что вместо "Mapped URL path [/xx]] на обработчике" Yyy "вы получаете" нет URL-адреса "пути идентифицированы" ).
Я знаю, что есть механизм для добавления перехватчиков к контроллерам через handlerMapping, но мой вопрос специфичен для перехватчиков AOP. Не являются ли аннотированные контроллеры просто pojos в контейнере Spring как любое другое pojo? В чем разница? Почему?
@Controller
@RequestMapping("/user")
public class RestTestImpl implements RestTest {
@RequestMapping(value="/", method={RequestMethod.GET})
public @ResponseBody String deleteUsers(String arg) {
return "Xxxxx";
}
}
В моем сервлет-контексте я:
<context:component-scan base-package="org.xxx.yyy"></context:component-scan>
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
. . .
</bean>
И все работает просто отлично.
Но когда я добавляю:
<aop:config>
<aop:pointcut expression="execution(* org.xxx.*(..))" id="pc1"/>
<aop:advisor advice-ref="hibernateInterceptor" pointcut-ref="pc1" order="2" />
</aop:config>
Контроллер перестает быть контроллером (нет ошибок, просто он перестает связываться с указанным URL-адресом)!