2013-02-11 57 views
0

我有以下的接口和類的Perf4沒有個人資料註釋的接口方法

public interface ServiceA { 

    @Profiled 
    String getString(); 
} 

public class ServiceAImpl implements ServiceA{ 
    String getString(){ 
     System.out.println("getString"); 
    } 

} 

<beans ....>  
    <aop:aspectj-autoproxy /> 
    <bean id="timingAspect" class="org.perf4j.log4j.aop.TimingAspect"/>" 
    <bean id="serviceA" class="com.naresh.profiler.service.ServiceAImpl" /> 
</beans> 

當我做serviceA.getString()電話沒有被TimingAspect截獲。如果將註釋從接口移動到實現類,它會截獲。我看到的原因是方法級別註釋沒有被繼承。如何解決這個問題?通過寫一些CustomBeanAnnotationProcessor

回答

0

即使@Profiled使用@Inherit它不會工作,因爲繼承註釋只傳遞到子類,而不是接口的實現。

@Inherited註釋在用於註釋 以外的任何類型時不會被繼承。實現一個或多個接口的類型永遠不會從它實現的接口繼承任何註釋。

來源:http://www.eclipse.org/aspectj/doc/released/adk15notebook/annotations.html#annotation-inheritance

更多細節:http://www.jroller.com/melix/entry/the_truth_about_annotations_inheritance

什麼將你的定製處理器做,查詢服務的接口爲@Profiled?我建議你手動註釋服務實現,因爲根據我的經驗,@Profiled僅在您的tagmessage屬性(每個實現類別不同)中使用它時纔有用。

http://perf4j.codehaus.org/devguide.html#Adding_the_Profiled_Annotation_to_Method_Declarations - >「@Profiled(tag =」dynamicTag _ {$ 0}「)」

相關問題