这篇文章主要介绍了Java中动态代理和静态代理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为什么要学习代理模式?这是SpringAOP的底层【SpringAOP和SpringMVC】代理模式的分类:静态代理动态代理静态代理中,我们对目标对象的每个方法的增强都是手动完成的(后面会具体演示代码_),非常不灵活(比如接口一旦新增加方法,目标对象和代理对象都要进行修改)且麻烦(_需要对每个目标类都单独写一个代理类)。 实际应用场景非常非常少,日常开发几乎看不到使用静态代理的场景。角色分析:抽象角色:一般会使用接口或者抽象类来解决真实角色:被代理的角色代理角色:代理真实角色,代理真实角色后,我们一般会免费云主机域名做一些附属操作客户:访问代理对象的人!代码步骤:1、接口2、真实角色3、代理角色4、客服端访问代理角色代理模式的好处:可以使真实角色的操作更加纯粹!不用去关注一些公共的业务公共也就交给代理角色!实现业务的分工!公共业务发生扩展的时候,方便集中管理!缺点:一个真实角色会产生一个代理角色;从JVM角度来看,静态代理在编译时就将接口、实现类、代理类这些都变成了一个个实际的class文件。AOP,的底层代理模式动态代理和静态代理角色一样动态代理的代理类是动态生成的,不是我们直接写好的!动态代理分为两大类:基于接口的动态代理,基于类的动态代理基于接口——JDK动态代理基于类:cglib动态代理java字节码实现:javasist需要了解两个类:Proxy: 代理类,InvocationHandler : 调用处理程序从 JVM 角度来说,动态代理是在运行时动态生成类字节码,并加载到 JVM 中的。动态代理的好处:可以使真实角色的操作更加纯粹!不用去关系一些公共的业务公共也就交给代理角色!实现1.loader
:类加载器,用于加载代理对象。2.interfaces
: 被代理类实现的一些接口;3.h
: 实现了InvocationHandler
接口的对象;要实现动态代理的话,还必须需要实现InvocationHandler
来自定义处理逻辑。 当我们的动态代理对象调用一个方法时,这个方法的调用就会被转发到实现InvocationHandler
接口类的invoke
方法来调用。1.proxy:动态生成的代理类2.method: 与代理类对象调用的方法相对应3.args: 当前 method 方法的参数1、定义接口2、实现租房的接口3、定义一个JDK动态代理类invoke()
方法: 当我们的动态代理对象调用原生方法的时候,最终实际上调用到的是invoke()
方法,然后invoke()
方法代替我们去调用了被代理对象的原生方法。4、获取代理对象的工厂类getProxy()
:主要通过Proxy.newProxyInstance()
方法获取某个类的代理对象5、实际使用运行上述代理的输出before methodrent
房东要租房
after methodrent感谢你能够认真阅读完这篇文章,希望小编分享的“Java中动态代理和静态代理的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持百云主机,关注百云主机行业资讯频道,更多相关知识等着你来学习!
相关推荐: Javascript深度克隆中的循环引用问题怎么解决
这篇文章主要介绍“Javascript深度克隆中的循环引用问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Javascript深度克隆中的循环引用问题怎么解决”文章能帮助大家解决问题。 概要 在前端项目开发中…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。