Spring新版本aop失效的探究
- 1.背景
- 2.探究
- 3.解決
1.背景
把spring從4.0更新到4.3.29後,自定義一個注解,至于方法上,切面中定義的規則是注解代理,更新後工程運作不走代理方法而是走注解下的方法。
2.探究
Spring開啟注解的配置是通過AnnotationConfigWebApplicationContext,向該context中添加一個configuration,該configuration需要有@EnableAspectJAutoProxy注解,并且如果不用@ComponentScan,則預設掃描同一個包下的切面。在切面中需要聲明被代理的bean,否則也不生效。檢視工程,有對應的configuration,且也添加進了AnnotationConfigWebApplicationContext,該configuration中的注解和bean的聲明也都有,結果還是不走代理方法。
3.解決
後來在context初始化的代碼中發現在調用context的register方法注冊configuration的方法是在refresh方法之後調用的,新版本的refresh方法會初始化aop容器,register方法放在refresh方法之後,初始化的aop就用不上register的configuration了,是以切面代理沒生效。