package com.iter.devbox.staticProxy;
public interface Star {
public void sing();
}
package com.iter.devbox.staticProxy;
public class RealStar implements Star {
@Override
public void sing() {
System.out.println(this.getClass().getName() + ".sing()");
}
}
package com.iter.devbox.staticProxy;
public class StarHandler implements Star {
private Star realStar;
public StarHandler(Star realStar) {
super();
this.realStar = realStar;
}
@Override
public void sing() {
System.out.println(this.getClass().getName() + ".sing() 执行之前");
realStar.sing();
System.out.println(this.getClass().getName() + ".sing() 执行之后");
}
}
package com.iter.devbox.staticProxy;
public class Client {
public static void main(String[] args) {
new StarHandler(new RealStar()).sing();
}
}

package com.iter.devbox.dynamicProxy;
public interface Star {
public void sing();
}
package com.iter.devbox.staticProxy;
public class RealStar implements Star {
@Override
public void sing() {
System.out.println(this.getClass().getName() + ".sing()");
}
}
package com.iter.devbox.dynamicProxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class StarHandler implements InvocationHandler {
Object star;
public StarHandler(Object star) {
super();
this.star = star;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("代理方法执行前");
Object obj = method.invoke(star, args);
System.out.println("代理方法执行后");
return obj;
}
}
package com.iter.devbox.dynamicProxy;
import java.lang.reflect.Proxy;
public class Client {
public static void main(String[] args) {
Star realStar = new RealStar();
// 调用处理器
StarHandler handler = new StarHandler(realStar);
// 利用JDK动态代理生成代理类接口
Star star = (Star) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),
new Class[]{Star.class}, handler);
star.sing();
}
}