动态代理涉及三个类/接口
Girl接口:
public interface Girl {
void eat();
void watchMovie();
}
具体的类
public class WangMeiLi implements Girl {
@Override
public void eat() {
System.out.println("屎真好吃");
}
@Override
public void watchMovie() {
System.out.println("电影真好看");
}
}
代理类
public class ChunLou implements InvocationHandler {
private Girl girl;
public ChunLou(Girl girl) {
this.girl = girl;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
doSomethingBefore();
Object ret= method.invoke(girl,args);
doSomethingEnd();
return ret;
}
private void doSomethingBefore(){
System.out.println("调用之前");
}
private void doSomethingEnd(){
System.out.println("调用之后");
}
public Object getInstance(){
return Proxy.newProxyInstance(girl.getClass().getClassLoader(),girl.getClass().getInterfaces(),this);
}
}
然后在main方法中如何调用代理呢??
public class Main {
public static void main(String[] args) {
Girl girl = new WangMeiLi();
ChunLou chunLou=new ChunLou(girl);
Girl proxy= (Girl) chunLou.getInstance();
proxy.eat();
}
}