由反射引出的Java动态代理与静态代理.docx

由反射引出的Java动态代理与静态代理.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

由反射引出的Java动态代理与静态代理

在《深入剖析Java中的反射,由浅入深,层层剥离!》这篇文章中我们讲反射时,曾提到过Java的动态代理中使用了反射技术,那么好,今天我们要就着反射的索引,来学习一下Java中的代理!

在Java中有多达23种的设计模式(后面Java基础更新完后,会找个时间详细的去写写这些设计模式),恰当的设计模式的使用能够提升代码的效率,简化代码的复杂性。

而今天我们要说的代理模式就是其中之一,所谓代理是为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。

大白话:买房的(客户方),房产销售(代理方),卖房的(委托方)

在Java中有静态代理和动态代理两种实现方式,继续放下看!!!

所谓静态代理,一般是针对编译期就已经完成了接口,实现类,代理类的定义,我们对目标对象的增强需要手工去完成,一个目标对象就要有个代理类,非常不灵活。

静态代理的实现步骤

1,因为代理类与被目标对象有相似的行为(共同),所以我们先创建一个接口。

publicinterfaceSaleHouse{

StringsaleHouse();

2,提供接口的实现类,当做目标对象

publicclassSaleHouseImplimplementsSaleHouse{

@Override

publicStringsaleHouse(){

return我要卖房子啦!!!

3,代理类同样也要实现接口,并在目标方法前后做一些控制操作

publicclassSaleHouseProxyimplementsSaleHouse{

privateSaleHousesaleHouse;

//提供一个包含目标对象的有参构造

publicSaleHouseProxy(SaleHousesaleHouse){

this.saleHouse=saleHouse;

@Override

publicStringsaleHouse(){

//调用方法前,我们可以加一些自己的控制

System.out.println(我要收代理费!!!

System.out.println(--------------------

Strings=saleHouse.saleHouse();

System.out.println(s);

System.out.println(--------------------

//调用方法后,我们依旧可以操作

System.out.println(我要拿提成!!!

return这就是静态代理

4,客户端调用代理类,并传入目标对象

publicclassTest{

publicstaticvoidmAIn(String[]args)throwsFileNotFoundException{

//客户端调用静态代理

SaleHousesaleHouse=newSaleHouseImpl();

SaleHouseProxysaleHouseProxy=newSaleHouseProxy(saleHouse);

saleHouseProxy.saleHouse();

5,控制台查看打印结果

我要收代理费!!!

--------------------

我要卖房子啦!!!

--------------------

我要拿提成!!!

其实无论是静态代理还是静态代理,在我们的日常开发中,使用的都是很多,但对于SpringAop、RPC等框架来说,动态代理发挥着相当大的作用,动态代理具有:运行时控制,灵活性更好的特点。

那怎么实现动态代理呢?

如下三种方式:

JDK动态代理

CGLib动态代理

使用Springaop模块完成动态代理功能//今天先不说这个

JDK动态代理

实现步骤:

1,定义一个接口及其实现类;

代码同静态代理中步骤1,步骤2;

2,自定义InvocationHandler(调用处理器)并重写invoke方法,在invoke方法中我们会调用原生方法(被代理类的方法)并自定义一些处理逻辑;

publicclassJdkDynamicInvocationHandlerimplementsInvocationHandler{

//代理

文档评论(0)

138****3012 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档