这是spring xml文件的一部分:
<!-- aop config -->
<aop:aspectj-autoproxy />
<bean id="fileService" class="com.test.file.FileService" />
<bean id="throughputManager" class="com.test.mbean.ThroughputManager" />
以下是java代码:
public class FileService {
public long read(Object obj,String id) throws Exception {
return 0L;
}
public long write(Object obj,String id) throws Exception {
return 0L;
}
}
@Aspect
public class ThroughputManager {
public static long TOTAL_READ_THROUGHPUT;
public static long TOTAL_WRITE_THROUGHPUT;
@AfterReturning(
pointcut="execution(* com.test.file.FileService.read(..))",
returning="size"
)
public void calculateReadThroughput(long size) throws IOException{
TOTAL_READ_THROUGHPUT+=size;
}
@AfterReturning(
pointcut="execution(* com.test.file.FileService.write(..))",
returning="size"
)
public void calculateWriteThroughput(long size) throws IOException{
TOTAL_WRITE_THROUGHPUT+=size;
}
}
当我调试程序并调用read
和write
方法时,ThroughputManager
中的两个方法未被调用。我试图找到原因,但似乎关于代码的一切都很好。任何人都可以帮助找出这个aop调用的错误吗?Thx。
答案 0 :(得分:1)
我终于明白了。虽然我在spring配置xml中将FileService
注册为bean,但我没有通过read
bean调用write
和FileService
方法 - 来自{{的实例1}}方法。相反,我只是getBeans
一个new
实例并调用这两个方法。多么大错......