第80章
publicintdo2
(“do2!”);
return1000;
大B:“代理分为静态代理与动态代理。”
小A:“按功能怎么分类哩?”
大B:“按功能将代理的组成类分为:标的类、标的接口、拦截类、耦合类。”
*Description:
*TODO标的接口
*RevisionHistory:
*wanginitialversion.
*/
publicinterfaceTarget1
voiddoSomething;
/**
*Copyright(C):
*Description:
*TODO标的接口
*RevisionHistory:
*wanginitialversion.
*/
publicinterfaceTarget2
Stringdo1(Stringmsg);
intdo2;
/**
*Description:
*TODO拦载类
*RevisionHistory:
*wanginitialversion.
*/
publicclassIntercept
publicvoidbefore
(“Before……”);
publicvoidafter
(“After.”);
2、静态代理特征部分
/**
**AngelSoftware,Inc.
*Copyright(C):
*Description:
*TODO耦合类(耦合是为了解耦)
*/
publicclassInvocation
publicObjectinvokeDoSomething
TargetImplt=newTargetImpl;
Interceptp=newIntercept;
//调用真实的标的类的方法之前置入拦载类的方法
www.youxs.org;
//调用真实的标的类的方法
www.youxs.org;
//调用真实的标的类的方法之后置入拦载类的方法
www.youxs.org;
returnnull;
/**
*Description:
*TODO静态代理(这理只简单地讲一下,着重讲动态代理)
*RevisionHistory:
*wanginitialversion.
*/
publicclassTest
publicstaticvoidmain(Stringargs)
www.youxs.org;
3、动态代理特征部分
;
/**
**AngelSoftware,Inc.
*Copyright(C):
*Description:
*TODO耦合类(耦合是为了解耦)
*RevisionHistory:
*wanginitialversion.
*/
publicclassInvocationimplementsInvocationHandler
publicObjectinvoke(Objectproxy,Methodmethod,Objectargs)
throwsThrowable
TargetImplt=newTargetImpl;
Interceptp=newIntercept;
if(args!=null&……1)
//更改参数
args[0]=“paramvaluehaschanged”;
//调用真实的标的类的方法之前置入拦载类的方法
www.youxs.org;
//调用真实的标的类的方法
Objecto=(t,args);
//调用真实的标的类的方法之后置入拦载类的方法
www.youxs.org;
returno;
;
/**
*Copyright(C):
*Description:
*TODO测试类
*/
publicclassTest
/**
*logic1与logic的共同逻辑
*amproxy代理
*/
privatestaticvoidpublicLogic(Objectproxy)
//对目标接口Target1代理的调用
(“对目标接口Target1代理的调用”);
Target1t1=(Target1)proxy;
www.youxs.org;
//对目标接口Target2的调用
(“对目标接口Target2代理的调用”);
Target2t2=(Target2)proxy;
(TargetMehoddo1return:“+www.youxs.org(”hello!));
(TargetMehoddo2return:+www.youxs.org);
/**
*newClass{,}
*正常
*urn
*/
publicstaticvoidlogic1
Invocationiv=newInvocation;
/*
*的参数说明
*参数1:类加载器(个人感觉这个参数有点多佘,这个参数完成可以去掉,不知当初他们为何要设这个参数干么)
*参数2:代理的标的接口。就是说,你要代理的标的类可能会实现多个接口,你可以有选择性地代理这些接口
*参数3:www.youxs.org,解开标的类与拦载类之间的耦合,使它们之间可以互不关心
*/
Objectproxy=(.getContextClassLoader,newClass{,},iv);
publicLogic(proxy);
/**
*newClass{}
*将会出异常,因为他没有在参数中声时自己要调用Target2接口,而后面却又去调用
*urn
*/
publicstaticvoidlogic2
Invocationiv=newInvocation;
/*
*的参数说明
*参数1:类加载器(个人感觉这个参数有点多佘,这个参数完成可以去掉,不知当初他们为何要设这个参数干么)
*参数2:代理的标的接口。就是说,你要代理的标的类可能会实现多个接口,你可以有选择性地代理这些接口
*参数3:www.youxs.org,解开标的类与拦载类之间的耦合,使它们之间可以互不关心
*/
Objectproxy=(.getContextClassLoader,newClass{},iv);
publicLogic(proxy);
publicstaticvoidmain(Stringargs)
logic1;
logic2;
下面以具本代码举例说明。
1、静态与动态代理的公共部分
(do1:+msg);
return“thisisStringMehtod!”;
publicvoiddoSomething
小A:“代理分为哪些类?”
/**
**AngelSoftware,Inc.
*RevisionHistory:
(“doSomething!”);
publicStringdo1(Stringmsg)
//TODOAuto-generatedmethodstub
*Description:
*TODO标的类
/**
*Copyright(C):
*/
publicclassTargetImplimplementsTarget1,Target2
*Copyright(C):
其他人正在读 :【天才俱乐部】【赤心巡天】【华娱璀璨时代】【我,奈克瑟斯奥特曼】【宝可梦侦探:竹兰逼我领养精灵】【风口无敌】【趁校花青涩,忽悠她给我做老婆!】【斗罗:人在绝世,赝品神灵】【人道独尊】【职场沉浮录】【吞噬星空之虫族主宰】【我怎么就成F1车手了?】【星河战役2之卡朋纪】【神医高手】【哲学家们都干了些什么?】【满朝文武都能听到我的心声】【家族修仙:掌上山河】【若张佳乐加入兴欣】【我能看到商品价格曲线】【流浪诸天的剑客】【从零开始无限进化】【重回1986小山村】【爱的饥渴】【灯花笑】【回到仙尊少年时[穿书]】【美利坚名利双收】【枕刀】【我在秦朝当神棍】【直播被剧透历史的千古一帝,今天也很尴尬】【悖论】