Spring 3 MVC @Controller与AOP拦截器?

任何人都知道为什么显然无法将AOP与带注释的MVC控制器一起使用吗?我有一个@Controller,一旦添加切入点,它就会停止工作。问题不在于没有调用拦截器,而是@Controller只是停止工作(在日志中,你可以看到“没有URL而不是“将URL路径[/ xx]映射到处理程序’Yyy””)确定的路径”)。

我知道有一种通过handlerMapping将拦截器添加到控制器的机制,但是我的问题特定于AOP拦截器。注释控制器不是像其他pojo一样只是在Spring容器中注释pojos吗?有什么不同?为什么?

@Controller

@RequestMapping("/user")

public class RestTestImpl implements RestTest {

@RequestMapping(value="/", method={RequestMethod.GET})

public @ResponseBody String deleteUsers(String arg) {

return "Xxxxx";

}

}

在我的Servlet上下文中,我有:

<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)!

回答:

从Spring MVC参考:

注意

使用控制器接口时(例如,用于AOP代理),请确保始终将所有映射注释(例如 @RequestMapping@SessionAttributes )放在控制器接口上而不是在实现类上。

当然,此注释已很好隐藏:-)

以上是 Spring 3 MVC @Controller与AOP拦截器? 的全部内容, 来源链接: utcz.com/qa/400385.html

回到顶部