Кто-нибудь знает, почему, по-видимому, невозможно использовать AOP с аннотированными контроллерами MVC? (см. Пост ).
У меня есть @Controller, который перестает работать, как только я добавляю pointcut к нему.
Проблема не в том, что перехватчик не вызывается, а в том, что @Controller просто перестает работать (в журнале вы можете увидеть, что вместо «Mapped URL path [/ xx] на обработчик« Yyy ») вы получаете« no 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)!