Java中的动态代理相对于静态代理有何优点?

来源:百度知道 编辑:UC知道 时间:2024/05/22 11:58:59
关于代理的优点(即分离业务逻辑和打印日志)的不用叙述了,我想知道动态代理有什么更多的好处?

缺Java中的动态代理相对于静态代理优点:
1、静态代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
2、静态代理对象只服务于一种类型的对象,如果要服务多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模稍大时就无法胜任了。如上的代码是只为UserManager类的访问提供了代理,但是如果还要为其他类如Department类提供代理的话,就需要我们再次添加代理Department的代理类。

我给你用通俗的方式说一下吧,文言文咱不会

假如你想干三件事(相当于三段代码),安排好以后如果你想调换顺序,换做以前,你必须去代码里进行改动,改动代码就意味着你要重新测试。
而如果你用动态代理就不会,他把每件事看作一个方面,每个方面是“织入”的,改变顺序不影响整体

动态代理不需要自己写代理类咯

所谓Dynamic Proxy(动态代理)是这样一种class:
它是在运行时生成的class,在生成它时你必须提供一组interface给它,然后该class就宣称它实现了这些interface。你当然可以把该class的实例当作这些interface中的任何一个来用。当然啦,这个Dynamic Proxy其实就是一个Proxy,它不会替你作实质性的工作,在生成它的实例时你必须提供一个handler,由它接管实际的工作。

动态代理更有利于程序的扩展;不需要更改原有的代码。

能在运行过程中根据接口的类型动态的调用实现该接口的类 。