




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
,CONFIDENTIAL,SpringAOP入门-代理机制,中国北京:电话:(010)82780848/62969799地址:北京市海淀区创业中路36号留学人员创业园306室,目标,什么是AOP代理机制静态代理动态代理AOP的几个基本概念,AOP,AOPAspectOrientedProgramming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦所追求的就是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。Aspect是程序设计一个新的中心,AOP並不取代OOP,两者各有各的角色,将职责各自分配给Object与Aspect,会使得程序中各个组件的角色更为清楚。,代理机制,静态代理代理对象HelloProxy将代理真正的HelloSpeaker实现类来执行hello()等方法,並在其前后加上日志记录的动作,这使得我们的HelloSpeaker在执行业务方法时不必介入日志记录动作,可以专心于自己的职责。注意:代理对象的一个接口只服务于一种类的对象,而且如果要代理的方法很多,我们势必要为每个方法进行代理,静态代理在程序規模稍大時就必定无法胜任.,代理机制,JDK动态代理Java在JDK1.3之后加入协助开发动态代理功能的类,我們不必为特定对象与方法写特定的代理,使用动态代理,可以使得一个handler服务于各个对象,首先,一個handler必须实现java.lang.reflect.InvocationHandler,代理机制,JDK动态代理importjava.lang.reflect.*;publicclassLogHandlerimplementsInvocationHandler/privateObjecttargetObject;/被代理的对象publicObjectcreateProxy(ObjecttargetObject)/传入被代理的对象this.targetObject=targetObject;returnProxy.newProxyInstance(targetObject.getClass().getClassLoader(),targetObject.getClass().getInterfaces(),this);/this通过被代理的对象生成它的代理对象,并同handler绑定在一起,代理机制,JDK动态代理publicObjectinvoke(Objectproxy,Methodmethod,Objectargs)throwsThrowableObjectresult=null;trySystem.out.println(begin);/日志记录result=method.invoke(targetObject,args);/!调用被代理对象的方法System.out.println(ok,end);/日志记录catch(Exceptione)e.printStackTrace();returnresult;InvocationHandler的invoke()方法会传入代理对象的方法名称与参数,实际上要执行的方法交由method.invoke(),並在其前后加上记录动作,method.invoke()返回的对象是实际方法执行过后的回传結果。,代理机制,JDK动态代理必須有接口:publicinterfaceIHellopublicvoidhello(Stringname);实现该接口:publicclassHelloSpeakerimplementsIHellopublicvoidhello(Stringname)System.out.println(Hello,+name);执行:加日志(利用代理类):LogHandlerlogHandler=newLogHandler();IHellohelloProxy=(IHello)logHandler.createProxy(newHelloSpeaker();/传入被代理对象,传回代理对象helloProxy.hello(“焦学理);/-logHandler.invoke()-helloSpeaker.hello()执行:不加日志(不利用代理类):IHelloh=newHelloSpeaker();h.hello(焦学理);,代理机制,JDK动态代理LogHandler不再服务于特定对象与接口,而HelloSpeaker也不用插入任何有关于日志记录的动作,它不用意识到日志记录动作的存在。上面例子中,如果HelloSpeaker本身插入日志记录动作,这使得HelloSpeaker的职责加重,並混淆其原來的角色,为此,使用代理将日志记录的动作提取出來,以分清日志记录的动作与HelloSpeaker的职责与角色。在这里,日志记录这个动作是我們所关注的,AOP中的Aspect所指的就是象日志记录这类的动作,将这些动作(或特定职责)视为关注的中心,将其设计为通用、不介入特定对象、职责清楚的组件,這就是所谓的面向Aspect。,代理机制,CGLib动态代理当代理对象没有实现接口,我们就可以使用CGLIB生成代理,需要我们使用cglib-nodep-2.1_3.jar。我们编写CGlibProxyFactory实例,需要实现MethodInterceptor接口publicclassCGLIBProxyimplementsMethodInterceptorprivateObjecttargetObject;/代理的目标对象publicObjectcreateProxyInstance(ObjecttargetObject)this.targetObject=targetObject;Enhancerenhancer=newEnhancer();/该类用于生成代理对象enhancer.setSuperclass(this.targetObject.getClass();/设置父类enhancer.setCallback(this);/设置回调用对象为本身returnenhancer.create();publicObjectintercept(Objectproxy,Methodmethod,Objectargs,MethodProxymethodProxy)throwsThrowablereturnmethodProxy.invoke(this.targetObject,args);CGLIB可以生成目标类的子类,并重写父类非final修饰符的方法。,代理机制,测试CGlibProxyFactoryfactory=newCGlibProxyFactory();PersionServiceBeanservice=(PersionServiceBean)factory.createProxyIntance(newPersionServiceBean();service.save(999);PersionServiceBean类没有实现接口,可以使用CGLib产生代理对象,这个代理对象是其子类实例。然后执行业务方法测试。总结:JDK动态代理:需要代理的对象要实现接口,代理对象要实现InvocationHandler接口使用CGLIB生成代理:需要代理的对象可以不用实现接口,代理对象要实现MethodInterceptor接口,基本概念,AOP中几个关键的概念:切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在SpringAOP中,一个连接点总是表示一个方法的执行。通知(Advice):在切面的某个特定的连接点上执行的动作。其中包括了“around”、“before”和“after”等不同类型的通知(通知的类型将在后面部分进行讨论)。(在JointPoint上所采取的动作,许多AOP框架通常以interceptor來实现Advice)切入点(Pointcut):匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。目标对象(TargetObject):被一个或者多个切面所通知的对象。织入(Weaving):把切面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象。,基本概念,通知类型:前置通知(Beforeadvice):在某连接点之前执行的通知。后置通知(Afterreturningadvice):在某连接点正常完成后执行的通知。异常通知(Afterth
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教师招聘之《幼儿教师招聘》练习题库有答案详解
- 渔业养殖水产品与健康饮食书籍出版创新创业项目商业计划书
- 教师招聘之《小学教师招聘》题库检测模拟题【模拟题】附答案详解
- 教师招聘之《幼儿教师招聘》考试综合练习完整参考答案详解
- 教师招聘之《幼儿教师招聘》强化训练含答案详解(模拟题)
- 教师招聘之《小学教师招聘》高分题库附答案详解【满分必刷】
- 2025年呼伦贝尔莫力达瓦达斡尔族自治旗内蒙古大学校园引才笔试备考附答案详解(突破训练)
- 患者隐私保护-医疗机构医疗质量安全专项整治行动方案
- 2025年美妆行业个性化定制服务模式在短视频平台中的应用报告
- 2025年私募股权投资基金行业投资热点:生物制药生产与质量控制退出策略深度分析
- 2025至2030年中国棉柔巾行业市场现状分析及投资机会研判报告
- 运营部排班管理制度
- 通威太阳能(成都)有限公司通威太阳能(成都)有限公司年产1GW晶体硅太阳能电池项目环评报告
- 药品进销存管理制度
- T/GIEHA 034-2022等离子体空气消毒机
- 2025入党考试试题及答案
- 燃气轮机原理课件
- 非晶合金变压器制造的改建及纳米晶超薄带和非晶粉末的研发项目环评资料环境影响
- 养心氏片治疗冠心病临床应用 送审稿
- 湘教版小学音乐教材解析
- 家装门窗订单合同协议
评论
0/150
提交评论