动态代理之jdk动态代理简单理解
1.介绍
动态代理在java中使用的很频繁,最经典的就是jdk和cjlib,这里我简单聊一聊jdk的。
2.jdk的执行大致思路
首先:如何理解jdk的动态代理必须实现接口?
注意这里的接口是你的代理目标的实现接口,并不是创建代理类的类实现的InvocationHandler接口;
其次:使用画图说明清晰一些,jdk代理最核心的就是invoke方法和proxy 代理类
最后:直接上代码看
//需要代理的类实现接口
public interface Home {
void live();
}
//需要代理的类
public class HomeImpl implements Home{
@Override
public void live() {
System.out.println("活着");
}
}
//能创建代理类的类
public class MyHandler implements InvocationHandler {
private Object target;
public MyHandler(Object target){
this.target=target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("开始创建代理类了");
return method.invoke(target,args);
}
}
//测试
public class Main {
public static void main(String[] args) {
MyHandler myHandler=new MyHandler(new HomeImpl());
//这个proxy就是被创建出来的代理类
Home proxy = (Home) Proxy.newProxyInstance(MyHandler.class.getClassLoader(),
new Class[] { Home.class }, myHandler);
// 调用方法
proxy.live();
}
}
执行结果: