gpt4 book ai didi

Spring AOP 非法参数异常 : Cannot convert value of type [$Proxy12

转载 作者:行者123 更新时间:2023-12-02 01:13:12 26 4
gpt4 key购买 nike

我正在尝试在现有的 spring 项目中配置一个建议。以下配置适用于单个包,但当切入点表达式尝试将该建议应用于所有包时,它会出现以下错误。

我的配置:

<aop:config>
<aop:pointcut id="loggingPointcut" expression="execution(* com.abc.businessprocess.operation..*.execute(..))" />
<aop:advisor id="methodLoggingAdvisor" advice-ref="methodLoggingAdvice" pointcut-ref="loggingPointcut" />
</aop:config>

我也尝试过注释,但它给出了同样的错误。即使在使用它给出同样的错误之后,我也尝试使用 CGLIB。

错误:

Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy12 implementing com.fmr.ast.common.businessprocess.util.Timeable,com.fmr.ast.common.businessprocess.operation.Operation,com.fmr.commons.taskmanager.core.Task,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.fmr.ips.businessprocess.operation.goalsetup.GetLeveledIRGExpInc] for property 'getRawDetailedLeveledExpInc'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy12 implementing com.fmr.ast.common.businessprocess.util.Timeable,com.fmr.ast.common.businessprocess.operation.Operation,com.fmr.commons.taskmanager.core.Task,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.fmr.ips.businessprocess.operation.goalsetup.GetLeveledIRGExpInc] for property 'getRawDetailedLeveledExpInc': no matching editors or conversion strategy found
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:391)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1289)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
... 33 more
Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy12 implementing com.fmr.ast.common.businessprocess.util.Timeable,com.fmr.ast.common.businessprocess.operation.Operation,com.fmr.commons.taskmanager.core.Task,org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised] to required type [com.fmr.ips.businessprocess.operation.goalsetup.GetLeveledIRGExpInc] for property 'getRawDetailedLeveledExpInc': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:231)
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138)
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:386)
... 37 more

最佳答案

查看异常跟踪,这是我所怀疑的:

GetLeveledIRGExpInc是实现三个接口(interface)的具体类:Timeable , Operation , Task .您在上下文中声明了一个这种类型的 bean,由于您的 AOP 配置,它会被代理。这意味着 bean 的运行时类型不会是 GetLeveledIRGExpInc再多了,它将是$Proxy12 (JDK 代理)仍然实现了上述三个接口(interface),但不是具体类的子类型 GetLeveledIRGExpInc .

在您的上下文中的某个地方有另一个 bean 需要将这种类型的 bean 注入(inject)到名为 getRawDetailedLeveledExpInc 的属性中.当 Spring 尝试将代理 bean 注入(inject)该属性时,它失败了,因为该属性的类型与 bean 的运行时类型不兼容。

根本问题是您尝试使用 JDK 代理机制应用非常通用的日志记录方面,该机制只能建议在接口(interface)上声明的方法。尝试使用 <aop:config proxy-target-class="true">这样也可以建议没有实现接口(interface)的类。这将解决上述详细问题,因为为 GetLeveledIRGExpInc 生成的 CGLIB 代理实际上是它的一个子类型。 (不要忘记将 cglib 添加到您的依赖项中以使其工作。)

关于Spring AOP 非法参数异常 : Cannot convert value of type [$Proxy12,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14937516/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com