是否有可能在截获方法时提取一次方法变量的值?我不希望拦截参数但方法中的属性值? e.g。
Business Logic:
@MyInterceptor
void myMethod(Object o){
ArrayList myList= null;
myList= dao.getRecords(o.getId) //intercept the result of this dao call
//I only want to call doWork after I have 'validated' contents of myList in interceptor
doWork(myList)
}
The Interceptor:
@Interceptor
@MyInterceptor
MyInterceptor{
@AroundInvoke{
public Object invoke(InvocationContext ctx) throws Exception {
//retrieve the contents of myList above and perform validation
//if it passes validation call ctx.proceed else return error
}
}
由于
答案 0 :(得分:2)
我担心你无法用拦截器真正做到这一点,因为他们无法访问方法内部变量(只需查看InvocationContext javadocs)。所以你唯一的机会就是让myList
成为一个bean属性,然后在拦截器中执行此操作。
@AroundInvoke{
public Object invoke(InvocationContext ctx) throws Exception {
if(ctx.getTarget() instanceof BeanWithListProperty) {
Object toProceed = ctx.proceed();
BeanWithListProperty bean = (BeanWithListProperty) ctx.getTarget();
List list = bean.getMyList();
return toProceed;
}
return ctx.proceed();
}
其他选项是使用Decorators,这将使代码更具可读性和效率。
但是我不太喜欢这些解决方案,在我看来,你的代码真的没有很好的设计,你想要实现什么?