分割方法时未应用Spring AOP

时间:2014-09-05 14:15:46

标签: java spring aspectj

这是我在stackoverflow上的第一篇文章...... 好吧,好吧。 我有一个自定义弹簧AOP注释,适用于此方法

@testInterceptor
public MyObjList getMyObjList( List qlist,Context cntxt){
//some processing
List<MyObj> myObjList= getMyObjs(qlist,cntxt);
//Some more processing
return myObjList;
}


public List<MyObj> getMyObjs( List qlist,Context cntxt){ 
List<MyObj> myObjList= new ArrayList<MyObj>(); 
//Some more processing 
return myObjList; 
}

我意识到这个注释实际上应该在getMyObjs()方法中。 所以我将注释移动到getMyObjs(),但由于某种原因,现在没有应用方面。 我不明白为什么。

@testInterceptor
public List<MyObj> getMyObjs( List qlist,Context cntxt){ 
List<MyObj> myObjList= new ArrayList<MyObj>(); 
//Some more processing 
return myObjList; 
}

1 个答案:

答案 0 :(得分:1)

由于Spring使用AOP的方式,为了使@testInterceptor能够在getMyObjs上工作,需要从类外部调用该方法。从getMyObjList调用它不会涉及拦截器。

查看this博文,了解更多详情。

通过一个例子澄清我的上述内容:

假设你有另一个班级

class Foo {

   @Autowired
   private MyObjList myObjList; 

   //this will invode the interceptor
   public void willWork() {
     myObjList.getMyObjs();
   }

   public void willNotWork() {
     myObjList.getMyObjList(); //will not invoke interceptor since `getMyObjs` is being invoked from inside the class that it's defined
   }

}