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