【问题标题】:AOP exception when calling Around aspects on调用 Around 方面时出现 AOP 异常
【发布时间】:2014-10-07 16:58:43
【问题描述】:

我正在尝试在所有服务方法上运行一个方面。但这对于具有原始返回类型的方法似乎失败了。我收到此错误 org.springframework.aop.AopInvocationException: Null return value from advice does not match original return type 。用于方面的所有方法是否有必要具有非原始返回类型?谢谢

  @Aspect
@Component
public class ServiceAspect
{
    private static final Logger LOG = Logger.getLogger(ServiceAspect.class);

   @Pointcut("execution(* com.xxx.service..*.*(..))")

    public void perform()
    {

    }

    @Around("perform()")
    public void performTimeCal(ProceedingJoinPoint joinPoint)
    {
        try
        {
            Date start = DateUtils.newDate();
            String processingTime = null;
            joinPoint.proceed();

            processingTime = DateUtils.computeDateDifference(start,
            DateUtils.newDate());
            LOG.info("STAT: " + getSimpleClassName(joinPoint) + "."
            + joinPoint.getTarget() + "(): " + processingTime);
        }
        catch (Throwable e)
        {
            e.printStackTrace();
        }

    }

    private String getSimpleClassName(ProceedingJoinPoint joinPoint)
    {
        if (joinPoint.getThis() != null)
        {
            return joinPoint.getThis().getClass().getSimpleName();
        }
        return "";

    }

}

   Service Method

   @Service
  public PropertyService
  {
     public boolean isMessageProcessingEnabled()
     {
       // DAO CODE
     }


  }

堆栈跟踪

org.springframework.aop.AopInvocationException: Null return value from advice does not match primitive return type for: public boolean com.xxxxxxx.service.admin.PropertyService.isMessageProcessingEnabled()
    at org.springframework.aop.framework.CglibAopProxy.processReturnType(CglibAopProxy.java:349)
    at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:82)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:633)
    at com.xxxxxxx.service.admin.ApplicationPropertyService$$EnhancerByCGLIB$$1a4e8f96.isMessageProcessingEnabled(<generated>)
    at com.xxxxxxx.processBoardMessages(BoardMessageProcessor.java:136)
    at com.xxxxxxx.processMessage(BoardMessageProcessor.java:95)
    at com.xxxxxxx.service.BrdServiceTest.testMessage(BoardServiceTest.java:126)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88)

【问题讨论】:

    标签: spring aop


    【解决方案1】:

    你的方面是错误的。环绕方面必须具有以下签名,并且必须始终返回调用结果才能继续。

    public Object aroundMethodName(ProceedingJoinPoint pjp, [other attributes) {
        Object result = pjp.proceed();
        return result;
    }
    

    如果您没有并且拥有void 方法,则基本上该建议适用的每个方法都返回null

    【讨论】:

    • 原始返回类型的方法呢?上面的代码也适用吗?我是否需要修改方法以返回对象而不是原始对象?谢谢
    • 不...你必须返回一些东西。但是原语不能是null,这也是异常告诉您的(并且由于void 返回类型对于原语来说是非法的,因此您正在强制null)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多