内容来自《Java Web 程序员面试笔试宝典》

【出现频率】★★★★☆ 【学习难度】

答案:代理分为静态代理和动态代理。

静态代理就是代理类在程序运行前就已经存在的代理方式,在运行前要编写好代码。静态代理中的代理类和委托类会实现同一接口或是派生自相同的父类。

动态代理是代理类在程序运行时创建的代理方式。也就是说,代理类并不是在Java代码中事先定义的,而是在运行时动态生成的。

静态代理性能相对会略高一些,但是缺点也很明显,要事先编写好代码,为不同的对象与不同的方法添加相同的通用处理时,会产生大量冗余代码。

如果使用动态代理,代码是在运行时动态生成的,可以对所有代理类的方法进行统一处理,而不用逐一修改每个方法,有高度的灵活性,有逻辑需要修改时,可以一次进行统一修改。效率很高,纠错也容易。因此动态代理获得了广泛的使用。