Guice MethodInterceptor应该返回什么

时间:2015-06-19 09:50:36

标签: java guice guice-3

我试图找到Guice MethodInterceptor应该返回的答案。返回methodInvocation.proceed();有什么区别?并返回null;

这是我的情况:在某些情况下,用户有权在某些方法中调用某些方法。我想用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
   }
}

这里是Interceptor类:

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
            }
    }
}

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您返回的是该方法的结果。如果要阻止调用,则应该抛出异常或返回某种“未授权”消息。看here

如果您使用的是Java8 +,我建议您最好选择更改方法签名以返回Optional而不是任何类型,并将其返回为空。