栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

动态代理基本概念

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

动态代理基本概念

一:代理是一种设计模式,它的主要作用是创建代理类代替目标对象的访问。代理在客户端与目标对象之间起到了一个中介的作用,很大程度的降低了业务代码与服务代码的耦合度(解耦)。

代理有三个要素:要有共同的行为、目标角色、代理角色。

二:代理根据实现方式分为两种:

        1.静态代理,今天代理的话是在程序运行时就已经存在了,每个代理类都需要一个代理对象,这个代理对象需要人工创建。

        操作:实现业务类相同的业务接口并且重写相同的业务方法,然后再调用业务方法是插入服务代码,有效的解耦。缺点:只能针对带个类进行代理,而且代码维护难度比较高。

        2.动态代理,顾名思义它是在程序创建的时候动态创建的,相比较于静态代理他更加灵活,动态代理的字节码是由java的反射机制动态产生的。

三:动态代理根据实现方式分为jdk的动态代理,cglib的动态代理。

        1.jdk的动态代理需要一个Object的有参构造方法来接收需要代理的类然后这个代理类实现InvocationHandler的接口并且重写他的invoke方法,然后在这个方法中使用反射调用业务类的方法并在实际调用类中使用Poxy类的newProxyInstance方法来生成代理对象,它需要三个参数,类加载器,代理类实例,被代理类的实现接口。

        2.cglib的动态代理相比较于jdk的要性能要高一些,也方便一点,它是直接生成一个目标类的并且重写父类的业务方法增强它的功能,这个子类就是代理类,因此cglib的代理类必须要是能被继承的类。

四:区别

JDK代理只能对实现接口的类生成代理;CGlib是针对类实现代理,对指定的类生成一个子类,并覆盖其中的方法,这种通过继承类的实现方式,不能代理final修饰的类。

动态代理的底层原理是基于反射机制的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009179.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号