- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课堂练习使用SpringIoC解耦合
在结合刚才的例子,看下这个图,我们通过动态代理实现AOP(采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行) AOP是一种思想,它与具体的实现技术无关,任何一种符合AOP的思想的技术实现,都可以看做是AOP的实现。通过java的动态代理机制,就可以很容易实现AOP的思想,实际上Spring的AOP也是建立在Java的代理机制上。 ——我们发现AOP实际上是由目标类的代理类实现的。AOP代理其实是由AOP框架动态生成的一个对象,该对象可作为目标对象使用。AOP代理包含了目标对象的全部方法,但是AOP代理中的方法与目标对象的方法存在差异,AOP方法在特定切入点添加了增强处理,并回调了目标对象的方法。 总结下对AOP理解: 业务处理的主要流程就是核心关注点,与之关系不大的部分就是横切关注点。横切关注点的一个特点就是:他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事务处理。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。 * AOP是Aspect-Oriented Programming的所写,即面向切面编程,是一种通过预编译方式和运行期动态代理实现在不修改源代码的情况下给成程序动态统一添加功能的一种技术。 开发其实就是在不断地重构,抽象重复代码,然后再进行封装。从最原始的模块化编程到面向对象编程,代码的封装越来越整齐清晰,但是依然存在重复代码,而这些重复代码几乎都和业务逻辑无关的系统逻辑代码。比如说在数据操作类中的插入、更新、删除数据等方法中都存在数据库事务的处理,重要业务逻辑方法中都有日志记录的逻辑等等。每个应用系统都存在着这种系统的重复逻辑代码,而我们并没有更好的方法去将这些代码抽象出来并进行管理,然而AOP的出现弥补了这一缺陷,AOP可以再不改变原有业务逻辑代码的情况下对原有业务进行横切拦截,处理那些重复的系统逻辑。和IOC容器一样,AOP也是spring的核心模块之一。AOP是Aspect-Oriented Programming的简称,面向切面编程。我们学了OOP,而AOP并非OOP的替代技术,而是他的有益补充。并且AOP得应用场合时受限的,它一般只适用于那些具有横切逻辑的应用场合(具有横切性质的系统性服务):比如性能检测、访问控制、事物管理、日志记录、安全检查、缓存、对象池管理等等,AOP是一种非常常用的解决方案。他并不适合处理具体的业务逻辑,分散处理业务逻辑会使逻辑混乱,增加维护成本。 为了方便理解 ,我就上个PPT中提的关于小狗,驯兽师的例子继续进行演示,我们改造下,将关于驯兽师的相关内容从run和jump中进行抽取,接下来,我们如何在程序运行中将关于驯兽师的动作加入到程序中呢?这就是我们这次用到的AOP实现的核心技术动态代理(Dynamic Proxy)。。。。演示。。。(演示中回顾下代理模式:就是为摸一个对象提供一个代理,通过代理操作该对象的方法,通常情况下,真实对象和代理对象需要实现相同的借口,在代理对象中保存真实对象的引用,为此来控制操作真实对象。) 演示完成,回顾再理解一下AOP和OOP的相关概念: OOP针对业务处理过程的实体(Dog、Cat、Horse)及其属性和行为(run)进行抽象封装,以获得更加清晰高效的逻辑单元划分。而AOP则是针对业务处理过程中(run、jump)的切面(command、award)进行提取,他所面对的是处理过程中的某个步骤或者阶段,以获得逻辑过程中各部门之间低耦合的隔离效果。这两种设计思想在目标上有着本质的差异 注意:演示示例:动态代理实现AOP 这个演示示例使用的是JDK动态代理实现,在此处关于动态代理不做重点讲解。在后面会进行对这个例子就JDK动态代理进行详细讲解 * 增强(Adivce):又翻译成通知,定义了切面是什么以及何时使用,描述了切面要完成的工作和何时需要执行这个工作。是织入到目标类连接点上的一段程序代码。增强包含了用于添加到目标连接点上的一段执行逻辑,又包含了用于定位连接点的方位信息。(所以spring提供的增强接口都是带方位名:BeforeAdvice、(表示方法调用前的位置)AfterReturninAdvice、(表示访问返回后的位置)ThrowAdvice等等,所以只有结合切点和增强两者一起才能确定特定的连接点并实施增强逻辑) 切入点(Pointcut):Advice定义了切面要发生“故事”和时间,那么切入点就定义了“故事”发生的地点。例如某个类或者方法名,Spring中允许我们使用正则来指定。 连接点(Joinpoint):切入点匹配的执行点称作连接点。如果说切入点是查询条件,那连接点就是被选中的具体的查询结果。程序执行的某个特定位置,程序能够应用增强
文档评论(0)