springAOP代理机制

springAOP代理机制

ID:37776305

大小:339.50 KB

页数:14页

时间:2019-05-30

springAOP代理机制_第1页
springAOP代理机制_第2页
springAOP代理机制_第3页
springAOP代理机制_第4页
springAOP代理机制_第5页
资源描述:

《springAOP代理机制》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、CONFIDENTIALSpringAOP入门--代理机制www.ascenttech.com.cn中国北京:电话:(010)82780848/62969799地址:北京市海淀区创业中路36号留学人员创业园306室目标什么是AOP代理机制静态代理动态代理AOP的几个基本概念AOPAOPAspectOrientedProgramming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦所追求的就是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。Aspect是程序设计一个新的中

2、心,AOP並不取代OOP,两者各有各的角色,将职责各自分配给Object与Aspect,会使得程序中各个组件的角色更为清楚。代理机制静态代理代理对象HelloProxy将代理真正的HelloSpeaker实现类来执行hello()等方法,並在其前后加上日志记录的动作,这使得我们的HelloSpeaker在执行业务方法时不必介入日志记录动作,可以专心于自己的职责。注意:代理对象的一个接口只服务于一种类的对象,而且如果要代理的方法很多,我们势必要为每个方法进行代理,静态代理在程序規模稍大時就必定无法胜任.代理机制JDK动

3、态代理Java在JDK1.3之后加入协助开发动态代理功能的类,我們不必为特定对象与方法写特定的代理,使用动态代理,可以使得一个handler服务于各个对象,首先,一個handler必须实现java.lang.reflect.InvocationHandler代理机制JDK动态代理importjava.lang.reflect.*;publicclassLogHandlerimplementsInvocationHandler{//privateObjecttargetObject;//被代理的对象publicObje

4、ctcreateProxy(ObjecttargetObject){//传入被代理的对象this.targetObject=targetObject;returnProxy.newProxyInstance(targetObject.getClass().getClassLoader(),targetObject.getClass().getInterfaces(),this);//this通过被代理的对象生成它的代理对象,并同handler绑定在一起}代理机制JDK动态代理publicObjectinvoke(Ob

5、jectproxy,Methodmethod,Object[]args)throwsThrowable{Objectresult=null;try{System.out.println("begin");//日志记录result=method.invoke(targetObject,args);//!!!!!!!!调用被代理对象的方法System.out.println("ok,end");//日志记录}catch(Exceptione){e.printStackTrace();}returnresult;}}Inv

6、ocationHandler的invoke()方法会传入代理对象的方法名称与参数,实际上要执行的方法交由method.invoke(),並在其前后加上记录动作,method.invoke()返回的对象是实际方法执行过后的回传結果。代理机制JDK动态代理必須有接口:publicinterfaceIHello{publicvoidhello(Stringname);}实现该接口:publicclassHelloSpeakerimplementsIHello{publicvoidhello(Stringname){Syst

7、em.out.println("Hello,"+name);}}执行:加日志(利用代理类):LogHandlerlogHandler=newLogHandler();IHellohelloProxy=(IHello)logHandler.createProxy(newHelloSpeaker());//传入被代理对象,传回代理对象helloProxy.hello(“焦学理");//->logHandler.invoke()->helloSpeaker.hello()执行:不加日志(不利用代理类):IHelloh=ne

8、wHelloSpeaker();h.hello("焦学理");代理机制JDK动态代理LogHandler不再服务于特定对象与接口,而HelloSpeaker也不用插入任何有关于日志记录的动作,它不用意识到日志记录动作的存在。上面例子中,如果HelloSpeaker本身插入日志记录动作,这使得HelloSpeaker的职责加重,並混淆其原來的角色

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。