- 4
- 0
- 约5.59千字
- 约 15页
- 2016-03-31 发布于湖北
- 举报
Spring AOP介绍及源码分析.doc
Spring AOP介绍及源码分析
软件开发经历了从汇编语言到高级语言和从过程化编程到面向对象编程;前者是为了提高开发效率,而后者则使用了归纳法,把具有共性的东西进行归类并使之模块化,达到便于维护和扩展的目的;如果说面向对象编程可以对业务需求进行很好的分解使之模块化;那么面向切面编程AOP(Aspect-Oriented Programming)则可以对系统需求进行很好的模软件开发经历了从汇编语言到高级语言和从过程化编程到面向对象编程;前者是为了提高开发效率,而后者则使用了归纳法,把具有共性的东西进行归类并使之模块化,达到便于维护和扩展的目的;如果说面向对象编程可以对业务需求进行很好的分解使之模块化;那么面向切面编程AOP(Aspect-Oriented Programming)则可以对系统需求进行很好的模块组织,简化系统需求和实现之间的对比关系,是对OOP思想的一种补充;块组织,简化系统需求和实现之间的对比关系,是对OOP思想的一种补充;
一、AOP介绍
举个例子来说明一下吧!现在系统中有很多的业务方法,如上传产品信息、修改产品信息、发布公司库等;现在需要对这些方法的执行做性能监控,看每个业务方法的执行时间;在不改变原业务代码的基础上,也许我们会这么做:
Offer接口:
Offer实现:
Offer代理:
我们要通过下面的方式来使用:
上面的例子的输出为:
上面的例子中,OfferProxy实现了IOffer,而所有的业务实现均委托给其成员offer;可以想像,这应该就是最简单的AOP的实现了;但这种方式会存在一个问题:如果有非常多的这种业务对象需要性能监控,我们就需要写同样多的XyzProxy来满足需求,这也是非常巨大的工作量。
上面说到了代理,我们先看看代理模式吧!
二、代理模式及实现
下面是代理模式的类图:
代理模式类图
代理模式中,存在一个称为ProxyObject的代理对象和RealObject的真实对象,它们都实现了相同的接口;在调用的地方持有ProxyObject的实例,当调用request()方法时,ProxyObject可以在执行RealObject.request()前后做一些特定的业务,甚至不调用RealObject.request()方法。
目前实现代理模式的方式有两种:基于JDK的动态代理和基于CGLIB字节码的代理。
2.1 JDK动态代理
JDK动态代理,顾名思义,是基于JDK的反射(reflect)机制;在JDK中,提供了InvocationHandler这个接口,下面是JDK里面的注释:
InvocationHandler is the interface implemented by the invocation handler of a proxy instance.
Each proxy instance has an associated invocation handler. When a method is invoked on a proxy instance, the method invocation is encoded and dispatched to the invoke method of its invocation handler.
简单翻译,意思是说:该接口由被代理对象的handler所实现;当调用代理对象的方法时,该方法调用将被编码,然后交给代理对象的invoke方法去执行;
是不是有一种豁然开朗的感觉呢?没错,答案就在你心中。
这样,上面的代码就可以改成下面的实现方式:
调用端:
通过这种方式,你不需要为针对每一个业务写一个代理对象,就可以很轻松地完成你的需求;但也许你已经注意到了,JDK的动态代理,在创建代理对象(上面红色代码部分)时,被代理的对象需要实现接口(即面向接口编程);
这就是JDK的动态代理,简单吧!下面看看CGLIB代理方式。
2.2 CGLIB代理
如果目标对象没有实现任何接口,那怎么办呢?不用担心,你可以用CGLIB来实现代理:
调用端:
使用CGLIB创建的代理对象,其实就是继承了要代理的目标类,然后对目标类中所有非final方法进行覆盖,但在覆盖方法时会添加一些拦截代码(上面CglibProxyFactory类中的intercept方法)。
下面看看Spring中是如何实现AOP的。
三、Spring AOP的实现
3.1 Spring AOP的几个概念
Spring AOP中的几个基本概念,每次学习AOP都被这几个概念折腾的很不爽,我们在这里再把这几个概念描述一遍,力争把这几个概念搞清,在每次review这块内容的时候可以很快上手。
1.切面(Aspect):切面就是一个关注点的模块化,如事务管理、日志管理、权限管理等;
2.
您可能关注的文档
- ps教程--功能叠加(mp3制作).doc
- ps滤镜抠图.doc
- PS滤镜调出墨绿色质感金属皮肤色彩照片9yue4.doc
- PS特效字的制作方法.doc
- ps的应用.doc
- PUA1400103电池箱内部温度检测装置(专利正文)v2.doc
- PVsyst家用独立光伏发电系统的优化设计.doc
- Q 010汽机房行车安装作业方案.doc
- Q2-006基础设施管制程序.doc
- Q3C:杂质残留溶剂的指导原则.doc
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
最近下载
- ntvf调试资料解读.doc VIP
- 电影《色.戒》的叙事伦理.doc VIP
- 上海大学2023-2024学年第1学期《高等数学(上)》期末考试试卷(A卷)附参考答案.pdf
- 佳能EOS1500D基本使用说明书说明书.pdf VIP
- 上海大学2023-2024学年第1学期《高等数学(上)》期末考试试卷(B卷)附参考答案.pdf
- 渣打银行(香港)有限公司.PDF VIP
- 2024年吉林高职高专院校单招统一考试《语文》试卷及参考答案.pdf VIP
- JSG202515机器人系统集成应用技术样题-学生组.docx VIP
- 棋盘博弈采购法战略体系.ppt VIP
- 节后复产复工安全知识考试试卷及答案.docx
原创力文档

文档评论(0)