Pour trouver l'heure rapidement pour le log import java.text.SimpleDateFormat; import java.util.Calendar; public class DateTimeHelper { public static final String DATE_FORMAT_NOW = "yyyy-MM-dd H:mm:ss:SSS"; public static String now() { Calendar cal = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); return sdf.format(cal.getTime()); } } Classe décrivant la méthode à appeler (ici, par introspection). public class Context { private String classeName; private String data; public Context(String classeName, String data) { super(); this.classeName = classeName; this.data = data; } public String getClasseName() { return classeName; } public String getData() { return data; } } Interface à respecter pour tous les intercepteurs. public interface Interceptor { boolean before(); public Object intercept(Context context) throws Exception; boolean after(); } Opération à exécuter public interface Operation { public abstract byte[] execute(String data); } Opération affiche HelloWorld dans la console. public class OperationHelloWorld implements Operation { @Override public byte[] execute(String data) { System.out.println(data); return null; } } Appelle les intercepteurs import java.lang.reflect.Constructor; public class OperationInvokeInterceptor implements Interceptor { private Context context; @Override public boolean before() { System.out.println(DateTimeHelper.now() + " - " + getClass().getName() + " before - création dynamique de l'instance de " + context.getClasseName()); return false; } @Override public Object intercept(Context context) throws Exception { this.context = context; before(); Class classe = Class.forName("Operation" + context.getClasseName()); Constructor methodCtr = classe.getConstructor(new Class[] {}); Operation op = (Operation) methodCtr.newInstance(); Object ob = op.execute(context.getData()); after(); return ob; } @Override public boolean after() { System.out.println(DateTimeHelper.now() + " - " + getClass().getName() + " after"); return false; } } Exemple de programme public class Main { public static void main(String[] args) { OperationInvokeInterceptor interceptor = new OperationInvokeInterceptor(); try { interceptor.intercept(new Context("HelloWorld", "Bonjour moi")); } catch (Exception e) { e.printStackTrace(); } } }