之前寫的校驗是否重複的AOP,在同事使用時,出現了不能成功進入切面的異常。
只有一個地方不一樣,我是在service中執行biz的校驗方法,在校驗方法上加切面
而同事是在biz中去執行biz的校驗方法,在校驗方法上加切面
這就是問題所在了。因爲biz調biz自己的方法,屬於內部調用,內部調用,aspectJ不響應。
這其實就好理解了,因爲面向切面編程,執行方法其實是bean來執行,這個bean不是真的對象,而是代理對象,是使用反射執行。
而內部調用,則不需要獲取bean,自然切面失效。
有個辦法,就是內部調用改成使用代理對象執行
if(null != AopContext.currentProxy()){
AopContext.currentProxy().method2();
}else{
method2();
}