インターセプターでメソッドアノテーションの状況を取得

Google guice インターセプターでメソッドに付与されたアノテーションの状況を取得する。

例えば、javax.inject.Named により、@Named("ABC") とメソッドに付与された場合で
インターセプター側でこの Named で付与した文字列を受け取る。

import org.aopalliance.intercept.MethodInterceptor の invoke に渡される
MethodInvocation から Method Class を取得して
付与された Annotation を参照して、Named に cast して value() を受け取る。

String name = Arrays.stream(invocation.getMethod().getAnnotations())
.filter(e->e.annotationType().equals(Named.class))
.findAny()
.map(e->((Named)e).value())
.orElse(null);

インターセプターで以下のようにする。

import java.util.Arrays;
import javax.inject.Named;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * MyInterceptor
 */
public class MyInterceptor implements MethodInterceptor{
   Logger logger = LoggerFactory.getLogger(this.getClass());
   
   @Override
   public Object invoke(MethodInvocation invocation) throws Throwable{
      String name = Arrays.stream(invocation.getMethod().getAnnotations())
      .filter(e->e.annotationType().equals(Named.class))
      .findAny()
      .map(e->((Named)e).value())
      .orElse(null);

      logger.debug("@Named value = "+ name);

      // TODO 前処理

      Object rtn = invocation.proceed();

      // TODO 後処理

      return rtn;
   }
}