AOP的基本概念

AOP从运行的角度考虑程序的流程,提取业务处理过程的切面。AOP面向的是程序运行中的各个步骤,希望以更好的方式来组合业务逻辑的各个步骤。AOP框架并不与特定的代码耦合,AOP框架能处理程序执行中特定切入点,而不与具体某个类耦合(即在不污染某个类的情况下,处理这个类相关的切点)。下面是一些AOP的一些术语:

切面(Aspect):业务流程运行的某个特定步骤,也就是应用运行过程的关注点,关注点通常会横切多个对象,因此常被称为横切关注点

连接点(JoinPoint):程序执行过程中明确的点,如方法调用,或者异常抛出。Spring AOP中,连接点总是方法调用。

增强处理(Advice):AOP框架在特定的切入点执行的增强处理。处理有around,before,after等类型。(说明:AOP是比较前言的只是,而大部分国内翻译人士在翻译计算机文献时,总是一边看各种翻译软件和词典,一边逐字逐句的翻译,而不是先去从总体上把握知识的架构。因此难免导致一些术语翻译的词不达意,在AOP的术语上也存在较大差异,对于Advice一词,有人翻译为“通知”,有人翻译为“建议”......实际上,Advice是指AOP框架在特定切面所加入的某种处理,笔者这里翻译为“增强处理”,希望可以表达出Advice的真正含义)

切入点(PointCut):可以插入增强处理的连接点。简而言之,当某个连接点满足执行要求时,该连接点将被添加增强处理,该连接点也就变成了切入点。例如:

?
1
pointcut xxxPointcut():execution(void H*.say*())

每个方法被调用都只是连接点,但如果该方法属于H开头的类,且方法名以say开头,按该方法的执行将变成切入点。如何使用表达式来定义切入点是AOP的核心,Spring默认使用AspectJ切入点语法。

  • 引入:将方法或字段添加到被处理的类中。Spring允许引入新的接口到任何被处理的对象

  • 目标对象:被AOP框架进行增强处理的对象,也被称为增强的对象。如果AOP框架是通过运行时代理来实现的,那么这个对象将是一个被代理的对象。

  • AOP代理:AOP框架创建的对象,简单地说,代理就是对目标的对象的加强。Spring中AOP代理可以是JDK动态代理,也可以是CGLIB代理。前者为实现接口的目标对象的代理,后者为不实现接口的目标对象的代理。

  • 织入(Weaving):将增强处理添加到目标对象中,并创建一个被增强的对象(AOP代理)的过程就是织入。织入有两种实现方式:编译时增强(如AspectJ)和运行时增强(如CGLIB)。Spring和其他纯Java AOP框架一样,在运行时织入。

由前面的介绍知道:AOP代理其实是由AOP框架动态生成的一个对象,该对象可作为目标对象使用。AOP代理包含了目标对象的全部方法,但AOP代理中的方法与目标对象的方法存在差异:AOP方法在特定切入点增加了增强处理,并回调了目标对象的方法。

Spring的AOP支持

Spring中AOP代理由Spring的IoC容器负责生成、管理。其依赖关系也由IoC容器负责管理。因此AOP代理可以直接使用容器中的其他Bean作为目标,这种关系可由IoC容器的依赖注入提供。Spring默认支持使用JDK动态代理来创建AOP代理,这样就可以为任何接口实现创建代理了。

Spring也支持CGLIB代理,在需要代理类而不是代理接口的时候,Spring自动会切换为使用CGLIB代理。但Spring推荐使用面向对象编程,因此业务对象通常都会实现一个或多个接口,此时默认将使用JDK动态代理,但也可以强制使用CGLIB。

Spring AOP使用纯Java实现。它不需要专门的编译过程。Spring AOP不需要控制类装载器的层次,因此它可以在所有JavaWeb容器或应用服务器中运行良好。

Spring目前仅支持将方法调用作为连接点(JoinPoint),如果需要把对Field的访问和更新也作为增强处理(Advice)的连接点,则可以考虑使用AspectJ。

Spring实现AOP框架跟其他的框架不同。Spring并不是要提供最完整的AOP实现(尽管Spring AOP有这个能力),而是侧重于AOP实现和Spring IoC之间的整合,用于帮助解决在企业级开发中的常见问题。因此,Spring通常和IoC容器一起使用,Spring从来就没有大官通过提供一种全面的AOP解决方案来与AspectJ竞争。Spring AOP采用基于代理的AOP实现方案,而AspectJ则采用编译时增强的解决方案。

Spring2.0可以无缝的整合Spring AOP、IoC和AspectJ,是的所有的AOP应用完全融入基于Spring的框架,这样的集成不会影响Spring AOP API或者AOP Alliance API,Spring AOP保持了向下兼容性,依然允许直接使用Spring AOP API来完成AOP编程。

一旦我们掌握了AOP的概念,不难发现进行AOP编程是一件很简单的事情。纵观AOP编程,其实需要程序员参与的只有三个部分:

  • 定义普通的业务组件

  • 定义切入点(PointCut),一个切入点可能横切多个业务组件

  • 定义增强处理(Advice),增强处理及时在AOP框架为普通业务组件织入时的处理动作

第一部分是最为平常的事情了,无需说明。第二、三部分就是AOP的关键:一旦定义了合适的切入点和增强处理,AOP框架将会自动生成代理,而AOP代理的方法大致有如下公式:

代理对象的方法 = 增强处理 + 被代理对象的方法

Spring 1.x采用自身提供的AOP API来定义切入点和增强处理,程序可以直接使用Spring AOP API来定义切入点和增强处理,但这种方式似乎有些过时了,现在通常建议使用AspectJ方式来定义切入点和增强处理,在这种方式下,Spring依然有如下两种选择来定义切入点和增强处理:

  • 基于注解的配置方式:使用@Aspect ,@Pointcut等注解来标注切入点和增强处理

  • 基于XML配置文件的方式

Spring中的AOP(二)——AOP基本概念和Spring对AOP的支持相关推荐

  1. spring框架的概述以及spring中基于XML的IOC配置——概念

    1.spring的概述     spring是什么     spring的两大核心     spring的发展历程和优势     spring体系结构 2.程序的耦合及解耦     曾经案例中问题   ...

  2. 谈谈Spring中的对象跟Bean,你知道Spring怎么创建对象的吗?

    本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 推荐阅读: Spring官网阅读 | 总结篇 Spring杂 ...

  3. spring中的设计模式_面试:设计模式在spring中的应用

    设计模式为我们解决一类问题提供了最佳的解决方案,我们在实际工作其实不太常用到,以至于会经常想不到设计模式.究其原因都是我们只是在使用别人框架的缘故,在这些框架的代码中经常能看到设计模式的影子,我们以s ...

  4. 谈谈Spring中的IOC和AOP概念 - 倪升武的博客 - CSDN博客

    转载于https://blog.csdn.net/eson_15/article/details/51090040 IOC和AOP是Spring中的两个核心的概念,下面谈谈对这两个概念的理解. 1. ...

  5. Spring中的AOP以及切入点表达式和各种通知

    视频功能审核通过了,可以看视频啦!记得点关注啊~ 注意:因为网络原因,视频前一两分钟可能会比较模糊,过一会儿就好了 记得点关注啊,视频里的wx二维码失效了,wx搜索:"聊5毛钱的java&q ...

  6. Spring(四)——AOP、Spring实现AOP、Spring整合Mybatis、Spring中的事务管理

    文章目录 1. 什么是AOP 2. 使用Spring实现AOP 2.1 使用Spring的API 接口实现 2.2 自定义实现 2.3 使用注解实现 3. 整合MyBatis 3.1 MyBatis- ...

  7. Spring AOP之HelloWorld与概念介绍(xml版)

    Spring AOP之HelloWorld与概念介绍 什么是AOP Spring AOP代码实现 Spring AOP 基本概念介绍 目标类 连接点 切入点 切面 切面类 通知 通知类别 织入 什么是 ...

  8. [5] Spring中的AOP操作(使用xml 配置文件的方式)

    AOP (Aspect Oriented Programing) 面向切面编程 AOP 采取横向抽取机制,取代了传统的纵向继承体系重复性代码(性能监视.事务管理.安全检查.缓存) Spring AOP ...

  9. Spring 学习 day3 : AOP,Spring中JdbcTemplate的使用

    1.AOP 1.1 什么是AOP 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方 式和运行期动态代理实现程序功能的统一维护的一种技术. ...

  10. 动态代理——》AOP —— Spring 中的 AOP||AOP 相关术语||学习 spring 中的 AOP 要明确的事

    AOP 概述 什么是 AOP       AOP:全称是 Aspect Oriented Programming 即:面向切面编程 AOP 的作用及优势 作用: 在程序运行期间,不修改源码对已有方法进 ...

最新文章

  1. 029 浏览器不能访问虚拟机的问题解决
  2. MySQL多实例安装配置指南
  3. qt 二维数组初始化_第十九章、C语言学习之数组3
  4. WPF canvas、基本图形、path几个示例
  5. Linux 查看CPU,内存,硬盘
  6. 【转】Eclipse Code Recommenders正式发布 智能代码建议工具
  7. Maven精选系列--标准目录结构
  8. mysql的连接名是哪个文件_mysql连接名是什么
  9. Python爬虫Scrapy框架IP代理的配置与调试
  10. python使用sphinx自动生成文档
  11. 华为防火墙产品介绍和工作原理介绍
  12. Atitit 爬虫发展历史 在互联网发展初期,网站相对较少,信息查找比较容易。然而伴随互联网爆炸性的发展,普通网络用户想找到所需的资料简直如同大海捞针,这时为满足大众信息检索需求的专业搜索网站便应运
  13. Linux进程管理---task_struct
  14. 数据库优化---空间换时间优化
  15. 电子产品做3C认证检测标准是什么
  16. 利用matlab实现pid控制,利用Matlab实现PID控制仿真
  17. 九、JavaScript网页特效 - 章节课后练习题及答案
  18. Vue项目关于省略号显示
  19. Multimedia
  20. 163电子邮箱,注册登陆及使用详细揭秘

热门文章

  1. 全民 Transformer (二): Transformer在深度学习和NLP中如何发挥作用
  2. LINUX下启动多个MYSQL服务
  3. Java web后台插入数据库中文乱码问题解决
  4. 20145213《信息安全系统设计基础》第二周学习总结
  5. 获取经纬度之间距离的Java工具类
  6. ASP.NET MVC3 及其学习资源
  7. 问题三十六:ray tracing中的Inverse Mapping(1)——球面Inverse Mapping
  8. 计算机设计类有哪些专业,2021新高考模式下报考,这4类专业有“潜规则”,考生报考需谨慎...
  9. 大数据分析平台的组成部分有哪些
  10. 大数据可视化需要遵循哪几个核心原则