静态代理、动态代理和CGLIB代理

一、介绍

代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。

代理模式UML类图


根据代理类的生成时间不同可以将代理分为静态代理和动态代理两种。

静态代理即为JDK原生静态代理。

而动态代理方式又可以分为两种:

1. JDK原生动态代理

2. CGLIB动态代理。

静态代理的对象在编译时生成,而动态代理的对象只在程序运行时生成,因此静态代理的类会产生对应的字节码文件,动态代理则不然。

二、静态代理

这种代理方式需要代理对象和目标对象实现一样的接口。

优点:

可以在不修改目标对象的前提下扩展目标对象的功能。

缺点:

1. 冗余。会产生过多的代理类。

2. 不易维护。随着接口增加方法,目标对象与代理对象都要进行相应修改。

// 接口interfaceHello{

    StringsayHello(String str);

}// 实现classHelloImpimplementsHello{

    @Override    publicStringsayHello(String str){

        return "HelloImp: " + str;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,138评论 1 32
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,366评论 11 349
  • 打算练手做一个iOS知乎日报,边做边学,在此记录一点在开发过程中遇到的问题 用pod进行项目依赖管理,目前主要是用...
    西土城小羊阅读 763评论 0 0
  • 通勤途中會經過一家包子店,因為工作開始於午後,常常我就順道買兩顆包子當午餐,肉包子素包子雪菜包子高麗菜包子,花樣並...
    王盛弘阅读 429评论 4 2
  • 善良必有善报(一): 巴西有一部著名的电影, 名字是中央车站, 在98年 德国柏林国际电影节上, 获得的名誉令人感...
    阿超Lilian阅读 229评论 0 0