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