- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
;4.1 AOP概述; 面向方面编程(AOP)也称为面向切面编程,是软件编程思想发展到一定阶段的产物,虽然是一种新的编程思想,但却不是面向对象编程(Object Oriented Programming,OOP)的替代品,它只是OOP的有益补充和延伸。
面向对象程序设计中将程序分解为不同层次的对象,通过封装、继承、多态等特性将对象组织成一个整体来完成功能,但是在一定场合,面向对象编程也暴露出一些问题。在传统的业务处理代码中,通常会进行日志记录、参数合法性验证、异常处理、事务控制等操作。虽然使用OOP可以通过组合或者继承的方式来达到代码的重用,但要实现某些功能(如日志记录),同样的代码仍然会分散到各个方法中。这样,如果要关闭某个功能,或者对其进行修改,就必须要修改所有的相关方法。这不仅增加开发者的工作量,相应的代码出错率也会提高。
; 在业务系统中,总有一些散落、渗透到系统各处且不得不处理的事情,这些穿插在既定业务中的操作就是所谓的“横切逻辑”,也称为切面。将重复性的代码抽取出来,放在专门的类和方法中的处理,这样就便于管理和维护了。即便如此,依然无法实现既定业务和横切逻辑的彻底解耦,因为业务方法中还要保留这些方法的调用代码,当需要增加或者减少横切逻辑的时候,还是要修改业务方法中的调用代码才能实现。我们所希望的是无需编写显式的调用,在需要的时候能够“自动”调用所需的功能,这正是AOP所要解决的问题。
AOP采取横向抽取机制,将分散在各个方法中的重复代码提取出来,然后在程序编译或运行时,再将这些提取出来的代码应用到需要执行的地方。这种采用横向抽取机制的方式,采用传统的OOP思想是无法办到的,因为OOP只能实现纵向的重用。
; 面向方面编程,其设计思想来源于代理设计模式,通常情况下调用对象的方法如下所示。
在代理模式中,可为对象设置一个代理对象,代理对象为func()提供一个代理方法。
在此模式下,就可在原有
代码乃至原业务流程都不变
的情况下,直接在业务流程
汇总切入新代码,增加新功
能,这就是所谓的面向切面编程。AOP的使用,使开发人员在编写业务逻辑时可以专心于核心业务,而不用过多地关注于其他业务的实现,这不但提高了开发效率,而且增强了代码的可维护性。; AOP中涉及到切面、通知、切入点、目标对象、代理对象、织入等很多术语,常用的术语简单介绍如下:
切面(Aspect)
连接点(JoinPoint)
切入点(Pointcut)
通知/增强处理(Advice)
目标对象(Target Object)
代理对象(Proxy Object)
织入(Weaving)
AOP的概念比较生涩难懂,切面可以理解为由增强处理和切入点组成,即包含了横切逻辑的定义,也包含了连接点的定义。;4.2 基于XML配置文件的AOP实现; 前置通知在连接点(所织入的业务方法)前面执行,不会影响连接点的执行,除非此处抛出异常。
下面通过示例演示如何实现前置通知,其过程如下所示:
(1) 将spring-1项目复制并重命名为“spring-5“。
(2) 在前面核心包的基础上,向项目中导入所需的jar包: spring-aop-5.0.4.RELEASE.jar、spring-aspects-5.0.4.RELEASE.jar、aopalliance-1.0.jar和aspectjweaver-1.9.1.jar,添加到构建路径中。
(3) 创建包com.ssm.service,在包中创建接口ProductService。
(4) 创建包com.ssm.service.impl,创建ProductService接口的实现类ProductServiceImpl。
(5) 创建包com.ssm.aop,创建日志通知类AllLogAdvice。
(6) 编辑Spring配置文件applicationContext.xml。
(7) 在com.ssm包中创建测试类TestAOP.java
; 返回通知是指在连接点正常执行后实施增强,不管是正常执行完成,还是抛出异常,都会执行返回通知中的内容。
下面通过示例演示如何实现返回通知,其过程如下所示:
(1) 在日志通知类AllLogAdvice中添加方法myAfterReturnAdvice。
(2) 在Spring配置文件applicationContext.xml中的<aop:aspect>元素内添加 <aop:after-returning>元素,将AllLogAdvice日志通知类中的myAfterReturnAdvice方法指定为返回
您可能关注的文档
- 第1章 搭建Java Web开发环境.pptx
- 第2章 Spring基本应用.pptx
- 第3章 Spring Bean的装配模式.pptx
- 第5章 Spring的数据库编程.pptx
- 第7章 Spring MVC常用注解.pptx
- 第9章 Spring MVC类型转换、数据格式化和数据校验.pptx
- 第10章 Spring MVC文件上传和下载.pptx
- 第11章 Spring MVC国际化和拦截器.pptx
- 第13章 MyBatis的关联映射.pptx
- 第15章 MyBatis的注解配置.pptx
- 2022年部编人教版九年级数学上册期末考试题及答案【最新】.doc
- 人教部编版四年级数学(上册)期末质量分析卷及答案.doc
- 人教版一年级科学下册期中试卷及答案【一套】.doc
- 2023年人教版九年级地理(上册)期末考试卷及答案.doc
- 2022-2023年人教版七年级数学下册期中测试卷及答案【全面】.doc
- 苏教版五年级《数学》下册全单元测试题【附答案】.docx
- 人教版三年级语文上册期末考试卷及答案【全面】.doc
- 部编版五年级数学下册期中考试题及答案【完美版】.doc
- 2022年部编版六年级数学上册期末试卷加答案.doc
- 2021—2022年部编人教版三年级语文上册期末试卷(参考答案).doc
文档评论(0)