当前位置: 首页 > 面试题库 >

Spring 3 MVC @Controller与AOP拦截器?

武博艺
2023-03-14
问题内容

任何人都知道为什么显然无法将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 )放在控制器接口上而不是在实现类上。

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



 类似资料:
  • 在 imi 中更加推荐使用 AOP 来拦截请求。 不要忘记把 Aspect 类加入 beanScan! Demo <?php namespace ImiApp\ApiServer\Aop; use Imi\RequestContext; use Imi\Aop\Annotation\Around; use Imi\Aop\Annotation\Aspect; use Imi\Aop\Annota

  • 本文向大家介绍详解spring面向切面aop拦截器,包括了详解spring面向切面aop拦截器的使用技巧和注意事项,需要的朋友参考一下 spring中有很多概念和名词,其中有一些名字不同,但是从功能上来看总感觉是那么的相似,比如过滤器、拦截器、aop等。 过滤器filter、spring mvc拦截器Interceptor 、面向切面编程aop,实际上都具有一定的拦截作用,都是拦截住某一个面,然后

  • 我正在使用spring AOP拦截这些方法。我在spring配置文件中有以下配置。 方面类: 上面的方法不拦截私有方法?要求方面既拦截私有方法,又拦截公有方法,怎么办?

  • 本文向大家介绍详解SpringBoot AOP 拦截器(Aspect注解方式),包括了详解SpringBoot AOP 拦截器(Aspect注解方式)的使用技巧和注意事项,需要的朋友参考一下 常用用于实现拦截的有:Filter、HandlerInterceptor、MethodInterceptor 第一种Filter属于Servlet提供的,后两者是spring提供的,HandlerInterc

  • 春令: 如何拦截Spring框架本身调用的所有公共方法?(例如,在Spring创建TestComponent实例期间使用TestComponent.init())当前,我只能通过调用来拦截:

  • 拦截驱动器 bp GetDriveTypeA 获取磁盘驱动器类型 bp GetLogicalDrives 获取逻辑驱动器符号 bp GetLogicalDriveStringsA 获取当前所有逻辑驱动器的根驱动器路径