我正在开发一个Spring MVC Web应用程序,我正在尝试为特定方法设置AOP包装器。我在aop-config.xml
中有以下内容:
<bean name="callCatcher" class="com.business.project.aop.callCatcher"/>
<aop:config proxy-target-class="true">
<aop:pointcut expression="execution(* com.business.project.util.className.methodName(..))" id="catchCall"/>
<aop:advisor advice-ref="callCatcher" pointcut-ref="catchCall"/>
</aop:config>
在此处找到类似的问题之后添加了proxy-target-class="true"
,其中提出了建议,但似乎没有为我的情况做任何事情。
aop-config.xml
包含在我的servlet-config.xml
:
<import resource="aop-config.xml"/>
当我尝试部署它时,我遇到以下异常:
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'com.business.project.util.className' to required type 'org.springframework.aop.Pointcut' for property 'pointcut'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [com.business.project.util.className] to required type [org.springframework.aop.Pointcut] for property 'pointcut': no matching editors or conversion strategy found
at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:463)
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:494)
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:488)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1433)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1392)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1128)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
... 37 more
我正在尝试拦截的类正在自动连接作为正在使用它的类的属性..所以我想知道这是否是问题的一部分。这没什么特别的:
public class className implements ApplicationContextAware {...}
我试图拦截的方法是公开的。
我不确定还包括哪些内容。我用google搜索异常,代理,检查切入点表达式。任何帮助将不胜感激。
编辑:
我在项目的ivy配置中包含了cglib,并按如下方式设置了aop-config:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
<aop:aspectj-autoproxy proxy-target-class="true"/>
<bean name="callCatcher" class="com.business.project.aop.EditorActionLogger"/>
<aop:config proxy-target-class="true">
<aop:pointcut expression="execution(* com.business.project.util.className.methodNAme(..))" id="callCatcher"/>
<aop:advisor advice-ref="editorActionLogger" pointcut-ref="timeslotReloader"/>
</aop:config>
</beans>
仍然得到同样的例外。
答案 0 :(得分:2)
男人我认为你必须把
<aop:aspectj-autoproxy proxy-target-class="true"/>
在servlet-config.xml中,而不是aop-config.xml在bean的同一个上下文中你要在它上面使用AOP className