详解 Java 中的三种代理模式

morton1年前 ⋅ 1039 阅读

代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能.

 

这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法.

 

举个例子来说明代理的作用: 假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人)来解决.这就是代理思想在现实中的一个例子.

 

  • 1. 静态代理
    • 可以做到在不修改目标对象的功能前提下,对目标功能扩展.
    • 因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类,类太多.同时,一旦接口增加方法,目标对象与代理对象都要维护.
    • 如何解决静态代理中的缺点呢?答案是可以使用动态代理方式

  • 2. 动态代理
    • 代理对象不需要实现接口,但是目标对象一定要实现接口,否则不能用动态代理
  • 3. Cglib代理
    • 1. 需要引入cglib的jar文件,但是Spring的核心包中已经包括了Cglib功能,所以直接引入spring-core-3.2.5.jar即可.
    • 2. 引入功能包后,就可以在内存中动态构建子类
    • 3. 代理的类不能为final,否则报错
    • 4. 目标对象的方法如果为final/static,那么就不会被拦截,即不会执行目标对象额外的业务方法.

https://mp.weixin.qq.com/s?__biz=MzI3ODcxMzQzMw==&mid=2247486759&idx=2&sn=6769d8ff9d163babe726b6213c6d15e4&chksm=eb538811dc240107bcf2a6e65b5381b2a68175af8ff12f4e2c1b0a06f7d16850db4acb64a18e&scene=21

全部评论: 0

    相关推荐