我知道cglib代理通过子类化目标类和重写目标类的方法来工作。
有人能说出动态代理究竟是如何工作的吗? 我知道它使用接口进行代理,但方法调用究竟是如何通过代理进行的?
使用 Proxy.newProxyInstance() 您可以请求实现所需接口的代理。你需要通过 InvocationHandler 也是,每次调用任何代理方法时都会调用它。然后,在处理程序中,您知道调用了哪个方法及其参数,因此您可以执行所需操作,包括使用目标对象。
Proxy.newProxyInstance()
InvocationHandler
Java是如何处理这个问题的?好吧,它是本地完成的,就像 reflection 以及许多基本功能。因此,您可以使用纯Java来模拟这种行为。
reflection
扩展信息 here 。