2013-10-29 20 views
8

'da Çevreyle ilgili yönleri ararken Tüm hizmet yöntemlerinde bir yönü çalıştırmaya çalışıyorum. Ancak bu, ilkel dönüş türüne sahip olan yöntemler için başarısız gibi görünüyor. Bu hatayı alıyorum org.springframework.aop.AopInvocationException: Tavsiyeden boş dönüş değeri ilkel dönüş türüyle eşleşmiyor. Aspect için kullanılan tüm yöntemlerin ilkel olmayan dönüş türlerine sahip olması gerekir mi? TeşekkürAOP istisnası,

@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 
    } 


    } 

StackTrace

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) 

cevap

12

Kişisel yönü yanlış. Yaklaşık bir numaralı telefonun imzası aşağıdaki imzayı taşımaktadır ve devam etmek için çağrının sonucunu daima geri göndermelidir.

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

değil mi ve temelde bir void yöntemi bu tavsiye null dönmek için geçerlidir her yöntem varsa.

+0

İlkel döndürme türüne sahip yöntemler nasıldır? Yukarıdaki kod da bunun için çalışacak mı? İlkel yerine nesneleri döndürmek için yöntemleri değiştirmem gerekiyor mu? Teşekkürler – varaJ

+1

Hayır ... Bir şeyler geri vermek zorundasınız. Ama bir ilkel, 'null' olamaz, bu da istisnanın size söylediği şeydir (ve 'ilkel için geçersiz olan' void 'dönüş türünden dolayı' null'ı zorlarsınız). –