Java Perf4j不评测带注释的接口方法
我有以下接口和类Java Perf4j不评测带注释的接口方法,java,spring,annotations,perf4j,Java,Spring,Annotations,Perf4j,我有以下接口和类 public interface ServiceA { @Profiled String getString(); } public class ServiceAImpl implements ServiceA{ String getString(){ System.out.println("getString"); } } <beans ....> <aop:aspectj-autoprox
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>
公共接口服务a{
@轮廓
字符串getString();
}
公共类ServiceAImpl实现ServiceA{
字符串getString(){
System.out.println(“getString”);
}
}
"
当我执行
serviceA.getString()时
调用没有被TimingSpect截获。如果我将注释从接口移动到实现类,它会被截获。我看到的原因是方法级注释没有被继承。如何解决这个问题?通过编写一些CustomBeanAnnotationProcessor
?,即使@Profiled
使用了@Inherit代码>它不起作用,因为继承的注释只会传递给子类,而不会传递给接口的实现
@当用于注释时,继承的注释不会被继承
类型以外的任何类型。实现一个或多个
接口从不从它所属的接口继承任何注释
工具
资料来源:
更多详情:
您的自定义处理器会做什么,查询服务的接口以获取@Profiled
?我建议您手动注释服务实现,因为根据我的经验,@Profiled
只有在您将其与标记和消息
属性一起使用时才有用(我认为每个实现类都不同)
->“@Profiled(tag=“dynamicTag{$0}”)”