2015-06-19 2 views
1

Я пытаюсь найти ответ, который должен быть возвращен Guice MethodInterceptor. В чем разница между возвращаемым методомInvocation.proceed(); и возврат null;Какой метод GuiceInterceptor должен возвращать

Вот моя ситуация: в некоторых случаях пользователь имеет право ссылаться на какой-то метод в некоторых случаях. Я хочу реализовать такую ​​ситуацию, используя guice aop.

Что мне нужно вернуть, если я не хочу использовать метод? И в чем разница между возвратом null и любым другим объектом.

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface AOPEstablisher{ 

} 

class GuiceModule extends AbstractModule{ 
    @Override 
    protected void configure() { 

     GuiceExampleAop guiceExampleAop = new GuiceExampleAop(); 
     requestInjection(guiceExampleAop); 
     bindInterceptor(Matchers.any(), Matchers.annotatedWith(AOPEstablisher.class), guiceExampleAop); 

    } 
} 


class CommandExecutor{ 
    @AOPEstablisher 
    public void executeInSomeCases(){ 

     //I want to execute this command in some cases 
    } 
} 

и вот перехватчик класс:

import org.aopalliance.intercept.MethodInterceptor; 

public class GuiceExampleAop implements MethodInterceptor { 

    @Inject 
    User user; 

    @Override 
    public Object invoke(MethodInvocation methodInvocation) throws Throwable { 

      if(user.hasRigths(){ 
       return methodInvocation.proceed(); 
      else{ 
       return null? 
       return methodInvocation? 
       //what should be returned here? 
       // what is difference between returning methodInvocation and null 
      } 
    } 
} 

Спасибо за вашу помощь.

+0

BTW: У вас возникнут проблемы с введением пользователя в метод перехватчика, потому что вам нужно создать экземпляр перехватчиков самостоятельно во время bind() ... –

ответ

2

То, что вы возвращаете, является результатом метода. Если вы хотите предотвратить вызов, то вам следует либо выбросить исключение, либо вернуть какое-то сообщение «Несанкционированное». Посмотрите here.

Если вы используете Java8 +, я бы рекомендовал в качестве наилучшего варианта изменить подпись метода для возврата необязательного вместо любого типа и вернуть его пустым.

+0

Да, вы правы, но тот же результат я получил, возвращая любой объект, на моем пути есть нет необходимости создавать исключение и ловить его. Так что это проще. – Marcin

+0

Возвращение null может быть немного рискованным, хотя, поскольку вызывающий может использовать этот объект, и тогда во время выполнения вы должны иметь NullPointerExceptions. Если вы находитесь в Java8, вы можете рассмотреть возможность изменения метода для возврата необязательного , а затем ваш перехватчик может вернуть его пустым. –

+0

ok null является рискованным, но в чем разница между возвратом методаInvocation и любым другим объектом (return new Object();) – Marcin

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