动态代理和静态代理唯一的区别在于静态代理要实现增强,只能通过在代理类的方法中添加逻辑,而动态代理在方法调用时,将方法交给invocationHandler的invoke执行,实际调用的是Method的invoke,那么我们可以在invocationHandler的invoke方法前后添加逻辑,可以对方法统一增强。
1、需要一个接口
public interface IServer {
void run();
}
2、需要一个被代理类
public class Tomcat implements IServer {
@Override
public void run() {
System.out.println("tomcat跑起来了");
}
}
3、jdk实现动态代理
public class MyDunamicClient {
public static void main(String[] args) {
IServer server = new Tomcat();
IServer proxy = (IServer) Proxy.newProxyInstance(server.getClass().getClassLoader()
, server.getClass().getInterfaces()
, (proxy1, method, args1) -> method.invoke(server, args1));
proxy.run();
}
}