2010-07-29 27 views
1

我有下面這段代碼在我LoggingAspect類,我希望這對我的方法,如我@Around的建議沒有被要求在包裝

gov.ssa.rome.service運行的所有方法。 impl.save() gov.ssa.rome.dao.impl.save()

但無論如何它只運行一次。我不知道爲什麼。我已經使用autowire將dao連接到servcice層。我非常感謝你的幫助。

我應該怎樣做才能讓這個方法運行在我所有的應用程序流中才能看到日誌中的流?

@Around("execution(* gov.ssa.rome..*.*(..))") 
public Object log(ProceedingJoinPoint pjp) throws Throwable { 

System.out.println("aspect Around started"); 

     Object ret = pjp.proceed(); 

    System.out.println("aspect Around ended); 

    return ret; 
} 

回答

2

方面可以使用不同的技術創建。如果您的應用程序是JDK代理,則它們只能用於在接口中定義的方法。如果他們是cglib代理,他們將爲除最終方法之外的所有人員工作。我認爲如果匹配類實現接口和cglib代理,默認情況下會使用JDK代理。

檢查您的保存方法的類是什麼樣的,以及保存是否來自接口。您可以強制執行aspectjweaver代理以使所有內容都能正常工作,但它們需要一些字節碼操作。我會建議堅持JDK代理並在需要的地方創建/擴展接口。有關更多信息,請參閱spring documentation AOP章節。