天天看點

Spring更新後切面注解代理失效1.背景2.探究3.解決

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了,是以切面代理沒生效。