开发者社区> 问答> 正文

AOP在spring的controller里无效的问题 配置报错

请问spring的controller里怎么使用aop,我自定义了注解和Aspect,注解在controller里面的方法上AOP无效,用在controller以外的类的方法上都有效,pointcut的表达式绝对正确的。网上找了一天说controller不支持AOP,也有的说Spring2.5以后有支持,烦恼啊。请问应该怎么弄,谢谢

展开
收起
kun坤 2020-05-31 18:01:56 1222 0
1 条回答
写回答
取消 提交回答
  • 没人会吗,还是我描述的有问题?

    ######泡了一天的spring官方论坛终于解决了。 Controller的AOP需要写在servlet.xml里

    ######今天我也碰到了同样的问题!解决!!!~~~######楼主,我也遇到一样问题,能说明一下吗? 我的邮箱dingyb2005@gmail.com,多谢了######

    引用来自“frankding73”的答案

    楼主,我也遇到一样问题,能说明一下吗? 我的邮箱dingyb2005@gmail.com,多谢了
    applicationContext.xml和servlet.xml都有各自的上下文(看论坛上的说法貌似是这样的)。所以在Controller上AOP,需要把AOP配置写在servlet.xml里。 ######context和servlet里都要用Aop的话,都要加????###### 我把AOP配置写到servlet.xml ,启动就报错了,这方法是不有问题?配置如下:  <aop:aspectj-autoproxy /> <bean id="aopTest" class="com.travelsky.pss.abframe.aop.AopTest">  </bean> 报错如下 2011-07-13 16:01:45,468][ERROR][org.springframework.web.context.ContextLoader][Line:220] Context initialization failed org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 55 in XML document from ServletContext resource [/WEB-INF/config/servletContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException: The prefix "aop" for element "aop:aspectj-autoproxy" is not bound. ######我解决了。原来是servlet.xml文件头少了aop的namespace,谢谢楼主。如下: <beans:beans xmlns="http://www.springframework.org/schema/mvc"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:aop="http://www.springframework.org/schema/aop"  xmlns:beans="http://www.springframework.org/schema/beans"  xmlns:context="http://www.springframework.org/schema/context"  xsi:schemaLocation="         http://www.springframework.org/schema/mvc         http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd         http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd         http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-3.0.xsd         http://www.springframework.org/schema/aop          http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">######我现在用的是3.0.5,同样遇到这个问题。我发现如果不写在servlet.xml里面,可以拦截方法,但是无法拦截异常。######什么意思啊,我的现在也是这样,但是我看别人写的根本就没有struts的配置文件。就只用啦@controller可以的。但是为什么我的就不行呢。我的是可以找到大的action但是里面的方法找不到。如我有个DeptAction,里面有个addDept()方法,但是我请求测试发现,deptAction的构造函数得到调用啦,但是返回的错误是找不到addDept这个方法######我也搞了好久,听到你们说我终于记起了,所有servlet.xml可以访问所有contextListener,contextListener不能访问servlet.xml,servlet.xml之间也不可以访问。###### 哥们儿,你还在吗?这个问题我也遇到了,解决办法是:
    <aop:pointcut expression="execution(* org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(..))" id="baseaop1"/>
    因为Controller已被spring容器内部代理了. 需要对org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter进行Aop才能起作用。 在这篇文章看到的答案,http://blog.csdn.net/lxf9601/article/details/5925211
    2020-05-31 18:02:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多