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