IMO, this checking for the presence of an annotation on a (invoked) method should happen at deployment processing time instead of at runtime per invocation. Typically, for interceptors which are meant of only a certain method (like in this case), the deployment unit processor which sets up these interceptors will check each method of the component to see if it's eligible for interception (for example, look for the presence of an annotation on that method) and if it's eligible, only apply the interceptor to that specific method (there's a API to do that) instead of applying the interceptor to all methods and then checking whether or not to skip the interception at runtime.