java动态代理和静态代理的区别是什么?有什么区别?

KLQ 2020-05-26 11:43:31 java常见问答 8213

你知道java动态代理和静态代理的区别是什么吗?下面就是要给大家专门介绍这方面的内容,一起来看看两者的区别吧。

一、代理

给某一个对象提供一个代理,以此来控制对这个对象的访问。

委托类和代理类有着共同的父类或者是父接口,这样的话,在任何使用委托类对象的地方都能够用代理对象来替代。

代理类负责请求的预处理、过滤、把请求分派给委托类处理、以及委托类执行完请求后的后续处理。

二、动态代理优点和缺点

和静态代理比较起来,动态代理有着一个非常显著的优点。

动态代理能够在自定义调用处理器统一处理委托类的方法,而不需要去一个个进行编写。

但是,动态代理也存在这个一个很明显的缺点。

那么就是,动态代理只可以代理基于接口的类,而不能够说,去代理没有接口的委托类。

三、静态代理类优点和缺点

介绍完了动态代理的优点和缺点,那么静态代理类的优点和缺点又有哪些呢?

静态代理优点,业务类只要关注业务逻辑本身,这一点就很好的保证了业务类的重用性(注意,这也是代理共同拥有的优点)。

静态代理缺点,主要有亮点。

1、代理对象的一个接口只为一种类型的对象服务,假如,要代理的方法很多,那么就要为每一种方法都进行代理,静态代理在程序规模稍微大一点的时候,就不能够承担了。

2、假如,接口增加了一个方法,那么,除了所有实现类都要实现这个方法之外,所有的代理类也要实现这个方法。

这样的话,那么维护代码的复杂程度就大大的增加了。

除了以上的几点之外,动态代理和静态代理比较起来,还有一个很大的好处。

那就是接口当中声明的所有方法都被转移到调用处理器一个集中的方法中处理(InvocationHandler.invoke)。

这样的话,在接口方法数量很多的时候,我们就能够灵活的去进行处理,而不是说,要像静态代理一样,每一个方法进行中转。

除此之外,动态代理的应用,会使得我们的类职责更加单一,复用性更强。

关于java动态代理和静态代理的区别你都理解了吗?两者的区别还是有很大的。

更多java常见问题,可以继续关注本站来了解哦。

推荐阅读:

动态代理的原理是什么?彻底理解java动态代理