Spring AOP不能拦截同一个类中内部的调用

例如,A中的方法a使用Spring AOP插入了一些功能(例如使用声明式事务):

@Transactional(rollbackFor = Exception.class)
public void a() {
 ……
 ……
}

在其他类中调用a方法时,一切正常。但A内部的其他方法调用a方法时,会发现Spring AOP并没有起作用,插入的功能无效了。

解决方法比较简单粗暴,在A内部调用a方法时,获取A的代理对象,然后调用这个代理对象的a方法即可,像这样:

((A) AopContext.currentProxy()).a();