1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.HashMap;
public class Manager{
private static HashMap<String, Referance> objets = new HashMap<String, Referance>();
public static void addObjet(String name, Referance element){
objets.put(name, element);
}
public static Referance getObjet(String name, Referance objet) throws Exception {
Class<?> clazz = objet.getClass().getInterfaces()[0];
Method[] methodList = clazz.getDeclaredMethods();
for(Method method : methodList){
objet = Manager.listenMethod(name, objet, clazz, method);
}
return objet;
}
private static Referance listenMethod(String name, Referance objet, Class<?> clazz, Method method) {
ClassLoader classLoader = clazz.getClassLoader();
Class<?>[] interfaces = {clazz};
InvocationHandler handler = (proxy, méthode, args) -> {
if(méthode.equals(method)) {
method.invoke(objets.get(name), args);
}
return méthode.invoke(objet, args);
};
return (Referance) Proxy.newProxyInstance(classLoader, interfaces, handler);
}
} |
Partager