package test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Date;
interface Dalijiekou{
public void answer(String name);
public void goodbye(String name);
}
public class DaLi implements Dalijiekou{
@Override
public void answer(String name) {
System.out.println("hello"+name);
}
public void goodbye(String name){
System.out.println("goodbye"+name);
}
public static void main(String[] args) {
Dalijiekou dailij = (Dalijiekou) new DaLiR().bind(new DaLi());
dailij.answer("doubi");
dailij.goodbye("tom");
}
}
class DaLiR implements InvocationHandler{
private Object delegate;
public Object bind(Object delegate) {
this.delegate = delegate;
return Proxy.newProxyInstance( delegate.getClass().getClassLoader(),
delegate.getClass().getInterfaces(), this);
}
@Override
public Object invoke(Object object, Method method, Object[] args)
throws Throwable {
Object result = null;
try {
Logger.loggin(Lerver.INFO, method.getName()+" method start");
result = method.invoke(delegate, args);
Logger.loggin(Lerver.DEBUG, method.getName()+" method end");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
class Logger{
public static void loggin(Lerver lerver,String context){
if(lerver.equals(Lerver.DEBUG)){
System.out.println(new Date().toLocaleString()+" "+context);
}
if(lerver.equals(Lerver.INFO)){
System.out.println(new Date().toLocaleString()+" "+context);
}
}
}
enum Lerver{
INFO,DEBUG;
}