SpringAOP 失效解決方案
SpringAOP是基於代理來對目標方法進行增強,但是有的時候又會出現“增強無效”的情況,比如在@Transactional下的某類中的方法內調用了該類的另一個方法,這種情況下,事務有時候會出現不生效的情況。因為,事務也是基於代理來增強目標對象的目標方法的,我們應該獲取代理對象再來調用子方法。
獲取代理對象的三個方法:
1. @Autowried 目標類注入進來,用這個注入進來的對象調用子方法即可。
2. 實現ApplicationContextAware接口或者@Autowried ApplicationContext對象,再通過getBean()來獲取。
3. 通過SpringAOP的API來獲取代理對象,這個方法的前提是在啟動類上的@EnableAspectJAutoProxy的注解中加上屬性exposeProxy = true;接下來通過API獲取即可: AopContext.currentProxy() 即可獲取當前類的目標代理對象,記得強轉成當前類,然后調用你想調用的子方法即可。