一、什么是动态代理?
首先我们想想什么是代理?比如在现实生活中老板出差在外,不能自己在公司做某件事,就请自己的秘书”代理“。在程序里”代理“的意思是原本是类A干的事,但是因为某种原因不方便亲自执行,而是通过类B来执行自己的职责,类B并不是完全的类A,它只是调用了类A的某执行方法,正如秘书代理老板做事其实是调用了老板的某项权力。
代码实现:在代理类的构造函数里传入真实对象,然后真实对象就可以在代理类调用自己的方法,从而实现代理,这就是代理的思想。我们从外部看动作就像是代理类实现的,其实还是真实对象实现的。
代理分静态代理和动态代理。静态代理是由程序员自己创建源代码再编译,在运行前就已经固定了能代理的真实对象的类型,所以当有很多不同类型的真是对象要被代理时,程序员就要针对不同类型的真是对象创建不同的代理类,这显然是很麻烦的;
而动态代理则是通过java的反射机制,在程序运行时动态地获取类型信息,实现动态代理的。
二、动态代理的实现: