2013-09-17 4 views
0

Можно ли извлечь значение переменной метода один раз/в то время, когда оно перехвачено? Я не хочу перехватывать параметры, но значение атрибута внутри метода? напримерJEE6 Interceptors - метод метода извлечения

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 

} 

} 

Благодаря

ответ

1

Я боюсь, что вы не можете сделать это с помощью перехватчиков, потому что у них нет доступа к методу внутренних переменных (просто посмотрите на InvocationContext javadocs). Таким образом, ваш единственный шанс сделать это - сделать myList бобы, а затем сделать это в вашем перехватчике.

@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 что приведет к немного более читаемым и эффективный код.

Однако мне не очень нравятся эти решения, кажется, что ваш код действительно не очень хорошо разработан, чего вы пытаетесь достичь?

+0

Спасибо, еще один вариант, который я рассматривал, заключался в перемещении DAO на перехватчик, но он имеет другие недостатки и не подходит для всех случаев использования. Спасибо за ответ – user1843591

Смежные вопросы