看到很多例子,都差不多,比如某个接口被代理了,如果他有一个foo()方法,那么由Proxy.newProxyInstance()方法获取的代理对象proxy也会有foo()方法,但我想知道,调用代理对象proxy.foo()时,对方法的调用是怎样转到InvocationHandler的invoke方法里的???难道是jvm动态创建的代理对象proxy的foo()方法的代码体里是对InvocationHandler对象的invoke方法的调用???哪位大侠告诉小弟啊,我看了源码就是想不通这接口的方法是如何被捕捉又如何被直接转发的呀!
jdk的代理只能代理接口, 代理是生成一个对象, 这个对象实现了所有需要代理的接口的所有方法, 每个接口方法都是 调用 InvocationHandler的invoke的方法.
jdk的代理,会根据你要代理的所有接口,去生成一个class,这个class实现了所有的接口,具体这个class怎么理解,你完全可以理解为字节、字符串、或者流,也就是会先构造一个代表这个class的流,构造完成后,使用这个class再使用class.newInstance方法来生成一个具体对象,并将这个对象返回给你。