1

是否可以一次/在拦截方法变量时提取它的值?我不想截取参数而是方法中的属性值?例如

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

}

}

谢谢

4

1 回答 1

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();
}

其他选择是使用装饰器,这将导致代码更具可读性和效率。

但是我不太喜欢这些解决方案,在我看来,您的代码确实设计得不好,您要达到什么目的?

于 2013-09-18T07:26:48.300 回答