1、上一篇介绍了AspectJ在AOP的简单应用,让我们了解到它的作用就是:开发者无需修改源代码,但又可以为这些组件的方法添加新的功能。

AOP的实现可分为两类(根据AOP修改源码的时机划分)

1>静态AOP实现:AOP框架在编译阶段对程序进行修改,即实现目标类的增强,生成静态的AOP代理类(生成的.class文件已经被修改,需要特定的编译器)。以AspectJ为例,所以AspectJ通常也被称作编译时增强的AOP框架。静态代理因经过编译后,所以性能上略有优势,但需要特殊的编译器。

2>动态AOP实现:AOP框架在运行阶段动态生成AOP代理(在内存中)以实现对目标类的增强。典型的有JDK动态生成代理类、cglib动态生成代理类。

2、spring AOP

spring AOP是动态代理的代表,生成的代理类要么与目标类实现相同的接口,要么是目标类的子类,前者使用的是JDK代理的代理策略,后者使用的是cglib代理的处理策略。spring中的AOP代理由spring的IoC容器负责生成、管理,其依赖关系也由IoC容器负责管理。spring默认使用java动态代理来创建AOP代理。spring也可以使用cglib代理,在需要代理类而不是代理接口的时候,spring会自动切换为使用cglib代理。

3、面向切面编程中的一些术语:

切面(Aspect):或者称为切面类,切面用于组织多个Advice(增强处理),Advice放在切面中定义。如aspectjTest项目中的TxAspect.java。

连接点(JoinPoint):程序执行过程中明确的程序执行点,如方法的调用,或者异常抛出点。spring AOP中,连接点总是方法的调用,即围绕着方法调用点。如aspectjTest项目中的连接点表达式。例如aspectjTest项目中如下代码:

pointcut xxxPointcut():execution(* com.lfy.bean.*.*(..));

增强处理(Advice):AOP框架在特定的切入点执行的增强处理。如aspectjTest项目“模拟进行权限检查”的处理代码。处理类型有before、around、after等类型。

切入点(Pointcut):可以插入增强处理(Advice)的连接点。换言之,当某个连接点满足指定的执行点条件要求时,该连接点将被插入增强处理,该连接点也就变成了切入点。每个方法被调用都只是连接点,但该方法属于某个连接点增强处理配置的匹配项,则该方法将被增强处理,该连接点也就变成了切入点,增强了也就是切入了。

如何使用表达式来定义切入点是AOP的核心,spring默认使用AspectJ的切入点语法。

引入:将方法或字段增强到被处理的类中。spring允许将新的接口引入到任何被处理的对象中。例如,可以将一个新接口引入到任何需要被增强的对象中。

目标对象:需要被AOP框架增强的对象。如果AOP框架采用的是动态AOP实现,那么该对象也称作被代理的对象。

AOP代理:被AOP框架(静态/动态)增强后的对象。spring中的AOP代理可以是JDK动态代理,也可以是cglib动态代理,前者为实现接口的目标对象的代理,后者为不实现接口的目标对象的代理。

织入(Weaving):将增强处理添加到目标对象中,并创建一个被增强的对象(AOP代理)的过程。织入有两种实现方式--编译时增强(如AspectJ)和运行时增强(如spring AOP)。

4、spring对AOP的支持

spring目前仅支持将方法调用作为连接点(joinpoint),如果需要对成员变量的访问和更新也作为增强处理的连接点,则可以考虑使用AspectJ。

一般开发人员进行AOP开发的步骤有如下3个部分:

1>定义普通业务组件。

2>定义切入点,一个切入点可能横切多个业务组件。

3>定义增强处理,增强处理就是AOP框架为普通业务组件织入(Weaving)的处理业务。

完成切入点的定义以及增强处理的定义,也就完成了AOP的编程,AOP框架将会自动的根据我们的切入点以及增强处理生成AOP代理。

目前高于spring-1.x版本的spring提供2种方式定义切入点和增强处理:

1>基于注解的“零配置”方式:使用@Aspect、@Pointcut等注解来标注切入点和增强处理。

2>基于XML配置文件的管理方式:使用spring配置文件来定义切入点和增强处理。

转载于:https://www.cnblogs.com/ZeroMZ/p/11311950.html

spring-第十六篇之AOP面向切面编程之Spring AOP相关推荐

  1. Spring-05 -AOP [面向切面编程] -Schema-based 实现aop的步骤

    一.AOP [知识点详解] AOP:中文名称面向切面编程 英文名称:(Aspect Oriented Programming) 正常程序执行流程都是纵向执行流程 3.1 又叫面向切面编程,在原有纵向执 ...

  2. Spring IoC和DI XML方式 注解方式 依赖注入 AOP面向切面

    初识Spring框架 时代变迁 原始时代我们用一个jsp搞定一切,但如此开发大型项目时我们遇到了问题,前端美化的代码和后端的代码交织,代码中又有html.js.css样式,又有业务逻辑和数据库访问代码 ...

  3. Spring入门——AOP(面向切面,切什么面?)

    SpringAOP 了解SpringAOP之前,我们先要了解一些关于代理的概念 什么是代理 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是 ...

  4. 【SSM】Spring系列——AOP面向切面编程

    文章目录 03 AOP面向切面编程 3.1 AOP概述 3.2 面向切面编程对有什么好处 3.3 模拟AOP框架实现 3.3.1 代码实现版本一 3.3.2 代码实现版本二 3.3.3 代码实现版本三 ...

  5. python aop编程_学习笔记: AOP面向切面编程和C#多种实现

    AOP:面向切面编程   编程思想 OOP:一切皆对象,对象交互组成功能,功能叠加组成模块,模块叠加组成系统 类--砖头     系统--房子 类--细胞     系统--人 面向对象是非常适合做大型 ...

  6. 大数据WEB阶段Spring框架 AOP面向切面编程(二)

    Spring AOP面向切面编程(二) 一.切入点的execution表达式 execution的表达形式: execution(修饰符? 返回值类型 所在包类? 方法名(参数列表) 异常?) ?表示 ...

  7. Spring AOP 面向切面编程相关注解

    Aspect Oriented Programming 面向切面编程 在Spring中使用这些面向切面相关的注解可以结合使用aspectJ,aspectJ是专门搞动态代理技术的,所以比较专业. 需要在 ...

  8. Spring 详解(三):AOP 面向切面的编程

    AOP即面向切面编程,它通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型. ...

  9. 大数据WEB阶段Spring框架 AOP面向切面编程(一)

    Spring - AOP面向切面编程(一) 一.代理模式概述 代理的特点:(目标对象即被代理者) 实现和目标对象相同的接口 具备和目标对象的方法 代理者不仅要做目标对象的方法 , 还要做一些额外的操作 ...

  10. 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据

    本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5136035 转载请标明出处,原文地址:http://blog.csdn.net/mo ...

最新文章

  1. C语言煎饼排序Pancake sort算法(附完整源码)
  2. 想建一个带分隔条的label 控件;
  3. python案例实操_用案例实操学习Python ,培养编程逻辑思维
  4. HTTP之content-type相关
  5. android studio怎么输入中文,怎么在linux版的AndroidStudio输入中文?
  6. 数据脱敏和加密_数据脱敏和数据加密的区别--工作需要,对其进行了简单的整理...
  7. oracle一步一步01
  8. 视频云存储平台 备忘
  9. 可编译运行的安卓USB/OTG摄像头程序
  10. SPSS中的均值比较—假设检验
  11. iText 7 html2pdf 使用总结
  12. 三层交换机与路由器的区别
  13. mysql如何避免单点故障
  14. 抓取淘宝天猫的商品的促销价格
  15. 2022出海欧美:英国电商市场现状及发展前景
  16. Ubuntu Server 20.04 安装桌面(图形界面) 以及 远程桌面
  17. 剑与远征游戏系统分析
  18. [Work Summary] Python将PDF转换成Word文档
  19. kafka安装(windows版)
  20. 给fiash图片加链接

热门文章

  1. LINUX右键新建,增加项目
  2. 别人统一四大力学,吾统一四大布局方向
  3. 自行编译cups绕过错误:file /etc/rc.d/rc.local from install of systemd conflicts with file from
  4. 天津西站,座才几个?
  5. 宽屏系统上播放幻灯片的设想
  6. 管理感悟:减少代码量的好办法
  7. 固定数组实现一个队列
  8. 手机端答题页面_有奖答题来啦!科普知识等你来挑战……
  9. new delete 之placement new 和placement delete
  10. mysql分组函数_mysql分组函数