0

私は次のインターフェースとクラスを持っています

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

4

1 に答える 1

0

継承された注釈はサブクラスにのみ渡され、インターフェイスの実装には渡されないため、@Profiled使用しても機能しません。@Inherit

@Inherited アノテーションは、型以外のものにアノテーションを付けるために使用された場合、継承されません。1 つ以上のインターフェイスを実装する型は、実装するインターフェイスから注釈を継承しません。

ソース: 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}")"

于 2013-02-11T22:40:22.667 に答える