基于接口的动态代理
public interface IActor {
void basicActor(float money);
void dangerActor(float money);
}
public class Actor implements IActor {
@Override
public void basicActor(float money) {
System.out.println("BasicActor make money:" + money);
}
@Override
public void dangerActor(float money) {
System.out.println("DangerActor make money:" + money);
}
}
public class ClientTest {
public static void main(String[] args) {
final Actor actor = new Actor();
InvocationHandler handler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("Invoke...");
System.out.println(proxy.getClass());
System.out.println("----------Method1----------");
Object rtValue = method.invoke(actor, args);
System.out.println("----------Method2----------");
return rtValue;
}
};
IActor proxyInstance = (IActor) Proxy.newProxyInstance(actor.getClass().getClassLoader(),
actor.getClass().getInterfaces(), handler);
proxyInstance.basicActor(3000);
}
}
基于子类的动态代理
public final class Actor {
public void basicActor(float money) {
System.out.println("BasicActor make money:" + money);
}
public void dangerActor(float money) {
System.out.println("DangerActor make money:" + money);
}
}
public class ClientTest2 {
public static void main(String[] args) {
final Actor actor = new Actor();
MethodInterceptor interceptor = new MethodInterceptor() {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("intercept...");
System.out.println("----------Method1----------");
Object rtValue = method.invoke(actor, objects);
System.out.println("----------Method2----------");
return rtValue;
}
};
Actor proxyInstance= (Actor) Enhancer.create(actor.getClass(), interceptor);
proxyInstance.basicActor(1000);
}
}