@AfterReturning无法拦截aspectJ调用的方法

时间:2014-03-13 09:34:56

标签: java spring aspectj

这是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;
}
}

当我调试程序并调用readwrite方法时,ThroughputManager中的两个方法未被调用。我试图找到原因,但似乎关于代码的一切都很好。任何人都可以帮助找出这个aop调用的错误吗?Thx。

1 个答案:

答案 0 :(得分:1)

我终于明白了。虽然我在spring配置xml中将FileService注册为bean,但我没有通过read bean调用writeFileService方法 - 来自{{的实例1}}方法。相反,我只是getBeans一个new实例并调用这两个方法。多么大错......