package ru.vyarus.guice.ext.core.method;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
/**
* Annotated method post processor.
*
* @author Vyacheslav Rusakov
* @since 30.06.2014
* @param <T> annotation type
*/
public interface MethodPostProcessor<T extends Annotation> {
/**
* Called to post process annotated bean method.
* It is safe to avoid explicit exception handling (except special cases required by processor logic).
*
* @param annotation annotation instance
* @param method annotated method
* @param instance bean instance
* @throws Exception on any unrecoverable error
* @see ru.vyarus.guice.ext.core.method.AnnotatedMethodTypeListener
*/
void process(T annotation, Method method, Object instance) throws Exception;
}