1

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

インターセプタークラスは次のとおりです。

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

ご協力いただきありがとうございます。

4

1 に答える 1

2

返されるのはメソッドの結果です。呼び出しを防ぎたい場合は、例外をスローするか、ある種の「許可されていない」メッセージを返す必要があります。ここを見てください。

Java8+ を使用している場合は、メソッド シグネチャを変更して任意の型ではなく Optional を返し、それを空にすることをお勧めします。

于 2015-06-19T10:06:36.040 に答える