Java Spring3MVC@Controller与AOP拦截器?
有人知道为什么不能将AOP与带注释的MVC控制器一起使用吗?(见附件)。 我有一个@Controller,一旦我添加切入点,它就会停止工作。 问题不在于没有调用拦截器,而在于@Controller只是停止了工作(在日志中,您可以看到不是“将URL路径[/xx]映射到处理程序'Yyy'”,而是“没有识别URL路径”) 我知道有一种通过handlerMapping向控制器添加拦截器的机制,但我的问题是针对AOP拦截器的。带注释的控制器不只是Spring容器中的pojo吗?有什么区别?为什么?Java Spring3MVC@Controller与AOP拦截器?,java,spring,spring-mvc,controller,spring-aop,Java,Spring,Spring Mvc,Controller,Spring Aop,有人知道为什么不能将AOP与带注释的MVC控制器一起使用吗?(见附件)。 我有一个@Controller,一旦我添加切入点,它就会停止工作。 问题不在于没有调用拦截器,而在于@Controller只是停止了工作(在日志中,您可以看到不是“将URL路径[/xx]映射到处理程序'Yyy'”,而是“没有识别URL路径”) 我知道有一种通过handlerMapping向控制器添加拦截器的机制,但我的问题是针对AOP拦截器的。带注释的控制器不只是Spring容器中的pojo吗?有什么区别?为什么? @Co
@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的AOP机制是将目标类包装在代理类中,代理类最终会丢失它们的注释,或者在编织之后删除原始注释 我相信会有更好的答案,我将进一步阐述我的答案,因为我想到了一种更好、更清晰的表达方式。来自: 注意
使用控制器接口时(例如用于AOP代理), 确保始终将所有 映射注释-例如
@RequestMapping
和@SessionAttributes
-在控制器接口上,而不是在实现类上
诚然,这张便条隐藏得很好:-)我遇到了同样的问题并找到了解决方案 实际上,您的控制器(由@controller注释)和方面(由@Aspect注释)应该位于相同的Spring上下文中 通常人们在dispatch servlet.xml或xxx servlet.xml中定义他们的控制器,并在主applicationContext.xml中定义他们的服务bean(包括方面)。这是行不通的 当Spring初始化MVC上下文时,它将为您的控制器创建一个代理,但如果您的方面不在同一上下文中,Spring将不会为它们创建拦截器 上述部分不取决于
- 在声明控制器/特性的过程中(通过手动XML声明或注释样式)
- 在您选择的代理样式上(JDK代理或CGLIB)
我已经测试了所有的组合,只要控制器和方面在相同的Spring上下文中,它们都能工作,非常感谢。就这样。通常建议在实现类而不是接口中放置注释,但在这种情况下,这似乎是一种方法。谢谢。@pakman通常需要对实现类进行注释,因为注释不是从接口继承的,但是控制器注释逻辑在运行时作用于实际bean(可能是代理),而不是静态beanclass@SeanPatrickFloyd你能检查一下我的问题吗:泰,有同样的问题……:)