spring AOP capabilities and goals

AOP是Spring框架面向切面的编程思想,AOP采用一种称为“横切”的技术,将涉及多业务流程的通用功能抽取并单独封装,形成独立的切面,在合适的时机将这些切面横向切入到业务流程指定的位置中。本篇结合实际案例详细讲述AOP的原理及实现过程。通过本篇的学习,可以达成如下目标。

● 理解AOP的编程思想及原理

● 掌握AOP的实现技术

Spring框架的AOP机制可以让开发者把业务流程中的通用功能抽取出来,单独编写功能代码。在业务流程执行过程中,Spring框架会根据业务流程要求,自动把独立编写的功能代码切入到流程的合适位置。

例如,在一个业务系统中,用户登录是基础功能,凡是涉及到用户的业务流程都要求用户进行系统登录。如果把用户登录功能代码写入到每个业务流程中,会造成代码冗余,维护也非常麻烦,当需要修改用户登录功能时,就需要修改每个业务流程的用户登录代码,这种处理方式显然是不可取的。比较好的做法是把用户登录功能抽取出来,形成独立的模块,当业务流程需要用户登录时,系统自动把登录功能切入到业务流程中。下图是用户登录功能切入到业务流程示意图。

图1 用户登录功能切入到业务流程示意图

1、 一个AOP案例描述

在课程案例SpringProgram项目中,一个业务流程是校长通过邮件发送上课通知给老师。校长执行该业务时,业务系统并没有对老师进行验证。现在要求校长在发送通知之前,需要对老师进行用户验证。

具体要求是在尽量不改变原有业务代码的情况下,加入老师验证功能。原有业务代码如下。

EmailNotice业务类代码没有对老师身份进行验证,可以考虑在执行setTeacher方法之前执行验证功能。

具体的操作步骤是:

(1)添加老师身份验证功能代码,用于切入到EmailNotice业务类,身份验证功能代码也称为切面,切入点为EmailNotice业务类的setTeacher方法;

(2)在Spring配置文件中配置AOP,添加切入面、切入点以及需要切入的目标Bean;

(3)编写测试代码,测试程序运行地正确性。

2、 实现AOP案例代码

在实现AOP案例之前,需要确定项目已经引入了Spring框架关于AOP功能的Jar包。下面列出的是spring-aop-5.0版本,其它版本也可以。

● spring-aop-5.0.8.RELEASE

● spring-aspects-5.0.8.RELEASE

另外还需要引入下面的Jar包:

● aspectjrt

● aspectjweaver

在课程案例SpringProgram项目中,相关的Teacher实体类、EmailNotice业务类、Spring配置文件已经存在,为了不影响前面课程的案例。实现AOP的代码重新编写AopTeacher实体类、AopEmailNotice业务类以及Spring配置文件。

(1)添加AopTeacher实体类

在课程案例SpringProgram项目中,添加AopTeacher实体类。

(2)添加老师身份验证功能

在课程案例SpringProgram项目中,添加VerifyUser类,并添加类方法beforeAdvice,该方法需要传入AopTeacher实体类,用于验证老师身份的合法性。

(3)添加AopEmailNotice业务类

在课程案例SpringProgram项目中,添加AopEmailNotice业务类。

AopEmailNotice业务类内置了AopTeacher对象,并通过sendMessage方法发送通知给AopTeacher对象。setTeacher方法用于设置AopTeacher对象,在设置之前需要验证AopTeacher对象身份的合法性,也就是要在setTeacher方法执行之前,执行VerifyUser类的beforeAdvice方法。

(4)添加Spring配置文件

在课程案例SpringProgram项目中,添加Spring配置文件aop.xml。

aop.xml需要使用AOP命名空间,因此需要在配置文件中导入spring-aop架构,添加下面的AOP命名空间。

标签用于AOP创建代理切入类(代理类)是基于接口的还是基于类的,如果proxy-target-class 属性值被设置为true,那么创建基于类的代理,否则创建基于接口的代理。

标签用于配置AOP。其中子标签添加一个切面Aspect,一个切面可以是一个模块或一个类。例如验证用户身份的VerifyUser类,该切面将被AOP调用。可以配值多个切面。

标签用于声明一个切入点,也就是切面提供的哪些方法可以被调用。expression 为切入点的表达式,用于定义切入点的路径。

例如:

execution(* com.milihua.springprogram.notice.AopEmailNotice.setTeacher(..))

上述表达式的意思是切入点为AopEmailNotice的setTeacher方法。其中*号表示切入点为任意的返回类型,(..)表示任意参数。

再如:

execution(* com.milihua.springprogram.notice. .*.*(..))

上述表达式的意思是切入点为com.milihua.springprogram.notice包及子包下所有的类及类中所有的方法。

又如:

execution(* com.milihua.springprogram.notice. *.*(..))

上述表达式的意思是切入点为com.milihua.springprogram.notice包下所有的类及类中所有的方法。

(5)编写测试代码

在课程案例SpringProgram项目中,添加AopTest测试类。

测试程序运行结果如下图所示。

 

3、AOP编程思想及术语

AOP是面向切面的编程,其编程思想是把散布于不同业务但功能相同的代码从业务逻辑中抽取出来,封装成独立的模块,这些独立的模块被称为切面,切面的具体功能方法被称为关注点。在业务逻辑执行过程中,AOP会把分离出来的切面和关注点动态切入到业务流程中,这样做的好处是提高了功能代码的重用性和可维护性。

例如,前面案例的VerifyUser类就是切面,VerifyUser类的beforeAdvice就是关注点。VerifyUser切面的功能就是验证老师身份,可以应用到与老师相关的不同业务流程中。AopEmailNotice是一个业务类,负责发送通知给老师,在发送通知之前需要验证老师的身份。AOP会在AopEmailNotice类的setTeacher方法执行之前,将beforeAdvice关注点切入到AopEmailNotice业务类中,并执行beforeAdvice方法。

Spring框架提供了@AspectJ 注解方法和基于XML架构的方法来实现AOP。前面的案例是基于XML架构的方法,后面一节会讲述基于@AspectJ 注解的方法。下面结合前面的案例讲述一下AOP的相关术语。

● Aspect

表示切面。切入业务流程的一个独立模块。例如,前面案例的VerifyUser类,一个应用程序可以拥有任意数量的切面。

● Join point

表示连接点。也就是业务流程在运行过程中需要插入切面的具体位置。例如,前面案例的AopEmailNotice类的setTeacher方法就是一个连接点。

● Advice

表示通知。是切面的具体实现方法。可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)和环绕通知(Around)五种。实现方法具体属于哪类通知,是在配置文件和注解中指定的。例如,VerifyUser类的beforeAdvice方法就是前置通知。

● Pointcut

表示切入点。用于定义通知应该切入到哪些连接点上,不同的通知通常需要切入到不同的连接点上。例如,前面案例配置文件的<aop:pointcut>标签。

● Target

表示目标对象。被一个或者多个切面所通知的对象。例如,前面案例的AopEmailNotice类。

● Proxy

表示代理对象。将通知应用到目标对象之后被动态创建的对象。可以简单地理解为,代理对象为目标对象的业务逻辑功能加上被切入的切面所形成的对象。

● Weaving

表示切入,也称为织入。将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期。

转载于:https://www.cnblogs.com/xasdh/p/10720440.html

weixin_30603633
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring---关于AOP机制的讲解
weixin_46816383的博客
04-05 1045
Spring---关于AOP机制的讲解一、什么是AOP二、AOP思想(面向切面)三、AOP中常用术语一览四、AOP的优势及作用五、基于xml的SpringAOP配置1、导入依赖2、接口3、目标类4、增强类/通知类5、applicationContext.xml6、测试7、运行结果8、另外一种写法:环绕增强(常用)六、基于注解的SpringAOP配置1、接口2、实现类3、切面类4、测试5、运行结果 一、什么是AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编
Spring AOP 16道面试题及答案.docx
06-29
Spring AOP,全称为Aspect Oriented Programming,是面向切面编程的一种编程范式,它是对传统的面向对象编程(OOP)的一种补充。在OOP中,核心是对象,而在AOP中,核心则是切面。切面是关注点的模块化,即程序中的...
spring框架的AOP机制
Herbert_cmj的博客
05-10 334
一、AOP简介 AOPSpring框架面向切面的编程思想,AOP采用一种称为“横切”的技术,将涉及多业务流程的通用功能抽取并单独封装,可以在不改变源代码的基础上添加新的功能,AOP提供了强大的中间件解决方案,这使得Spring IOC更加完善。我们可以通过AOP来实现日志监听,事务管理,权限控制等等。 二、AOP的概念 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事...
深入聊一聊 Spring AOP 实现机制!
CSDN资讯
01-26 1886
作者 |张书康责编 | 郭 芮AOP(Aspect-Oriented Programming,即面向切面编程。Spring AopSpring框架中的地位举足...
spring AOP机制
最自由的笑的博客
09-10 152
AOP思想 AOP面向切面编程思想是对 OOP面向对象思想的一种补充,OOP思想通过封装、继承和多态性等概念来建立一种对象层次结构。 但是当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。比如日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。这种散布在各处的无关的代码被称为横切代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。 而AOP技术则恰恰相反,它可以解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“A
Spring AOP机制
gis_zhouda的博客
11-06 239
看了很多Spring AOP的文章,该博文写的比较简单易懂,转载学习下。 转自:https://www.cnblogs.com/hongwz/p/5764917.html AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念...
Spring AOP教程
12-07
Spring框架的关键组件之一是面向方面编程(AOP)框架。 面向方面的编程需要将程序逻辑分解成不同的部分。 此教程将通过简单实用的方法来学习Spring框架提供的AOP/面向方面编程。
spring aop jar 包
07-26
Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强的技术。这个"spring aop jar 包"包含了实现这一功能所需的类和接口,...
SpringAOP:Spring AOP示例
05-06
SpringAOP Spring AOP(面向方面​​的编程)用于模块化“横截面”服务。 用一种简单的方式,我们可以说它是一个旨在拦截某些进程的组件,例如,在执行某个方法时,Spring AOP可以审核该执行方法,并在该方法执行...
SpringAOP机制
路在何方
05-26 761
目录 1.AOP简介 2.AOP术语 3.Spring AOP 1.在Spring中启用AspectJ注解支持,用AspectJ注解声明切面 2.用基于XML的配置声明切面 1.AOP简介 AOP是面向切面的编程,其编程的思想是把散步于不同业务但功能相同的代码从业务逻辑中抽取出来,封装成独立的模块,这些独立的模块被称为切面,切面具体功能方法别称为关注点。在业务逻辑执行过程中,AOP会把分离出来的切面和关注点动态切入到业务流程中,这样做的好处是提高了功能代码的重用性和可维护性。 在应用A.
springAOP机制
黑马程序员广州中心的专栏
05-19 112
AOP编程思想及术语 AOP是面向切面的编程,其编程思想是把散布于不同业务但功能相同的代码从业务逻辑中抽取出来,封装成独立的模块,这些独立的模块被称为切面,切面的具体功能方法被称为关注点。在业务逻辑执行过程中,AOP会把分离出来的切面和关注点动态切入到业务流程中,这样做的好处是提高了功能代码的重用性和可维护性。 例如,前面案例的VerifyUser类就是切面,VerifyUser类的beforeAdvice就是关注点。VerifyUser切面的功能就是验证老师身份,可以应用到与老师相关的不同业务流程中。
谈谈对SpringAOP机制
weixin_45723088的博客
10-14 142
谈到Spring,必然是它的核心两大功能,IOC和AOP. AOP:面向切面,其原理就是通过动态代理,代理类做一系列的切面处理。 动态代理有两种方式,JDK原生的和CG。(boot2之后用的就是CG) 这里注意,JDK原生的的本质是其通过接口的方式生成的代理类,而CG是通过子类继承父类的方式生成的代理类,如果是final不可继承的肯定是生成不了代理类。 AOP的运用场景:很多小白还不了解在什么时候用过AOP。 首先,事务的运用就是AOP,翻开Dao层的注解是不是有个@Transactional,你把@Tra
SpringAOP机制详解
最新发布
互联网底层民工的博客
07-07 395
AOP面向切面编程是一种编程思想,是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP为Aspect Oriented Programming的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。通知的类型:前置通知,后置通知,异常通知,最终通知,环绕通知。包名与类名之间一个点。
Spring AOP 的实现机制
z_ssyy的博客
12-13 600
静态代理是编译期实现,动态代理是运行期实现,可想而知前者拥有更好的性能。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final,那么它是无法使用CGLIB做动态代理的,诸如private的方法也是不可以作为切面的。动态代理则不会修改字节码,而是在内存中临时生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。
Spring中的AOP原理
weixin_44117767的博客
07-10 1662
0 为什么需要AOP 现在有一个情景: 我们要把大象放进冰箱,步骤为:打开冰箱->放入大象->关闭冰箱 如果再把大象拿出来,步骤为:打开冰箱->拿出大象->关闭冰箱 代码如下: public void put() { System.out.println("打开冰箱..."); System.out.println("放入大象..."); System.out.println("关闭冰箱..."); } publi
一文读懂Spring中的AOP机制
架构师小秘圈
03-31 273
一、前言这一篇我们来说一下 Spring 中的 AOP 机制,为啥说完注解的原理然后又要说 AOP 机制呢?1、标记日志打印的自定义注解@Target({ElementType.METHO...
SpringAOP实现原理
m0_57229961的博客
01-27 9369
本学习笔记将尽可能的将AOP的知识讲解的通俗易懂,先从一个典型的问题出发,引入AOP这个概念,介绍AOP的基本概念,再到Spring中的AOP的实现方案,最后进行一个简单的总结归纳。本学习笔记中不考虑cglib、也不会太关注Spring AOP如何使用,而是尽可能的简单的说清楚AOP的工作原理。 笔记中贴出的源代码均是Spring 5.1.7-RELEASE 版本 问题提出 如下代码块,现在需要统计这个方法执行的耗时情况 public void runTask() { doSome
Spring AOP:聚焦方法拦截
"Spring AOPSpring框架中的一个重要模块,专注于面向切面编程,它通过提供方法级别的Joinpoint来实现AOP的功能。虽然Spring AOP仅支持方法执行类型的Joinpoint,但这已经足够应对大部分开发场景。" Spring AOP,...
写文章

热门文章

  • ubuntu gdm3和lightdm切换 15744
  • HelloWorld 14480
  • 要素分析-网络伦理 8277
  • 小米手机指令大全 8106
  • Python-PostgreSQL的使用 7995

大家在看

  • 帝国CMS正文内容设置关键词与图片链接冲突的问题
  • 基于ssm+vue儿童教育类网站(开题报告+程序+论文+java)
  • 《谷粒商城实战》-4、项目拉取,创建模块并提交到码云 239
  • 京东返利APP的高并发与高可用架构设计 2372
  • java毕业设计-基于springboot+vue的社区一体化在线服务平台设计和实现,基于springboot的社区一体化在线服务系统设计和实现(源码+LW+部署文档+远程调试+代码讲解等)

最新文章

  • xpath详解
  • 单一概括(作用)- B市各类行业组织
  • PMM系列~管理篇
2019年667篇
2018年752篇
2017年729篇
2016年532篇
2015年412篇
2014年325篇
2013年269篇
2012年213篇
2011年140篇
2010年121篇
2009年102篇
2008年65篇
2007年55篇
2006年32篇
2005年18篇
2004年7篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司天津专业网站优化价格表黄石外包网站优化刷pc网站优化排名奉贤区官方网站优化排名贵州信息化网站优化检修网站导航优化具体包括汕尾网站优化全国网站优化方式有哪些如何优化自己的公司网站哪里有网站优化系统加盟代理项目上海测量网站优化价格对比深圳最好的网站优化及营销方案重庆网站收录优化网站一些栏目打不开影响优化携程移动网站优化实践池州网站目标关键词优化蕉岭网站优化优化网站排名就刃云速 捷黄骅网站关键词优化排名校园网站优化哪家专业内容优化网站seo网站优化师 职位百度网站优化哪家价格便宜乐山企业网站优化服务江苏网站长尾关键词优化武汉网站优化公司怎么选效果好网站优化排名外包专业网站排名优化搜索引擎优化和网站推广郑州瓷砖行业网站优化推广怎么样歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化