spring同时使用aop和spel表达式出错:Property or field 'instrument' cannot be found on object of type 'com.sun.pr

本文解决了一个关于 Spring AOP 中无法通过代理对象访问属性的问题。问题出现在尝试访问一个未公开的字段时,通过设置 proxy-target-class=true 解决了这一问题。

错误信息:

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 6): Property or field 'instrument' cannot be found on object of type 'com.sun.proxy.$Proxy2' - maybe not public?
at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:224)
at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:94)
at org.springframework.expression.spel.ast.PropertyOrFieldReference.access$000(PropertyOrFieldReference.java:46)
at org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue(PropertyOrFieldReference.java:374)
at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:88)
at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:120)
at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:242)
at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:161)
... 23 more

由于aop是默认创建的代理是基于接口的,不能访问类的方法。performer接口中只有一个perform方法,所以会报错:
Property or field 'instrument' cannot be found on object of type 'com.sun.proxy.$Proxy2' -
解决此问题,只需要在aop:config中加上proxy-target-class="true"就行了

<aop:config proxy-target-class="true">
        <aop:aspect ref="log">
            <aop:pointcut id="perform" expression="execution(* algo.study.spring.xmlbean.Performer.perform(..))" />
            <aop:before pointcut-ref="perform" method="start" />
            <aop:after pointcut-ref="perform" method="end" />
        </aop:aspect>
    </aop:config>
"EL1008E: Property or field 'creNo_' cannot be found on object of type 'com.joyintech.entity.cust.CustInfo' - maybe not public or not valid?[org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:223), org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:106), org.springframework.expression.spel.ast.PropertyOrFieldReference.access$000(PropertyOrFieldReference.java:53), org.springframework.expression.spel.ast.PropertyOrFieldReference$AccessorLValue.getValue(PropertyOrFieldReference.java:412), org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:93), org.springframework.expression.spel.ast.OpPlus.getValueInternal(OpPlus.java:95), org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:114), org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:273), org.springframework.cache.interceptor.CacheOperationExpressionEvaluator.key(CacheOperationExpressionEvaluator.java:104), org.springframework.cache.interceptor.CacheAspectSupport$CacheOperationContext.generateKey(CacheAspectSupport.java:795), org.springframework.cache.interceptor.CacheAspectSupport.generateKey(CacheAspectSupport.java:591), org.springframework.cache.interceptor.CacheAspectSupport.performCacheEvict(CacheAspectSupport.java:508), org.springframework.cache.interceptor.CacheAspectSupport.processCacheEvicts(CacheAspectSupport.java:492), org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:433), org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:345), org.springframework.cache.interceptor.CacheInterceptor.invoke(CacheInterceptor.java:64), org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186), org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAo
最新发布
08-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值