一、什么是AOP

面向方面的编程(AOP)是一种编程技术,是面向对象编程的补充,它也提供了模块化。

在面向对象编程中,关键的单元是对象,AOP的关键单元是切面,或者说关注点。一些切面可能有集中的代码,但是有些可能被分散或者混杂在一起,它允许程序员模块化横切关注点或行为,这些问题或行为跨越典型的责任分工,例如日志记录和事务管理。

二、关注点和横切关注点

(1)关注点

应用的模块中实现的行为。关注点可以被定义为:我们想实现以解决特定业务问题的方法。
(2)横切关注点

贯穿整个应用程序的关注点。像日志、安全和数据转换,它们在应用的每一个模块都是必须的,所以他们是一种横切关注点。

三、AOP 术语

1、连接点(Joinpoint)
连接点描述的是程序执行的某个特定位置

2、切入点(Pointcut)
切入点是一个连接点的过滤条件,AOP 通过切点定位到特定的连接点

3、通知(Advice)、增强或横切关注点
切面在某个具体的连接点采取的行为或行动,称为通知。

切面的核心逻辑代码都写在通知中,有人也称之为增强或者横切关注点。

通知是切面功能的具体实现,通常是业务代码以外的需求,如日志、验证等,这些被模块化的特殊对象

4、通知器(Advisor)
通知器由一个切入点(pointcut)和一个通知(Advice)组成。通知就是增强的那部分功能代码,如记录日志代码、控制权限代码

5. 切面(Aspect)
与通知器(advisor)类似都是通知+切入点。区别在于,切面中的类无需实现通知接口,但需要在配置文件中指定类中的方法名;

而通知器仅需指定类名即可,因为通知器中的类都实现了通知接口,很明确的知道通知方法是哪个。

6、目标(Target)
被通知的对象(方法)

7、代理(Proxy)
向目标对象应用通知之后创建的对象

8、引介(Introduction)

引介是一种特殊的增强,它为类添加一些属性和方法。

即使一个业务类原本没有实现某个接口,通过AOP的引介功能,我们可以动态地为该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类

9、织入(weaving)
织入是将切面与外部的应用类型或者类连接起来以创建通知对象(adviced object)的过程。

三种织入的方式:
a、编译期织入,这要求使用特殊的Java编译器。
b、类装载期织入,这要求使用特殊的类装载器。
c、动态代理织入,在运行期为目标类添加增强生成子类的方式。
Spring采用动态代理织入,而AspectJ采用编译期织入和类加载期织入。
AspectJ:编译时织入、后编译时织入(post-compile-time weaving)、类加载时织入(load-time weaving, LTW)

四、AOP可用的实现

基于Java的主要AOP实现有:

AspectJ
Spring AOP
JBoss AOP

五、AOP的通知类型

通知(advice)是在程序中想要应用在其他模块中的横切关注点的实现。

Advice主要有以下5种类型:

1、前置通知(Before Advice):@Before

2、返回之后通知(After Retuning Advice):@AfterReturning

3、抛出(异常)后执行通知(After Throwing Advice):@AfterThrowing

4、后置通知(After Advice):无论连接点是通过什么方式退出,@After

5、围绕通知(Around Advice): @Around

六、AOP 代理

代理是使用非常广泛的设计模式。Spring AOP是基于代理实现的
AOP 代理是一个由 AOP 框架创建的用于在运行时实现切面协议的对象
Spring AOP默认为 AOP 代理使用标准的 JDK 动态代理
Spring AOP 也可以使用 CGLIB 代理

Spring Aop总结相关推荐

  1. Spring AOP + Redis解决重复提交的问题

    Spring AOP + Redis解决重复提交的问题 用户在点击操作的时候,可能会连续点击多次,虽然前端可以通过设置按钮的disable的属性来控制按钮不可连续点击,但是如果别人拿到请求进行模拟,依 ...

  2. 利用Spring AOP与JAVA注解为系统增加日志功能

    Spring AOP一直是Spring的一个比较有特色的功能,利用它可以在现有的代码的任何地方,嵌入我们所想的逻辑功能,并且不需要改变我们现有的代码结构. 鉴于此,现在的系统已经完成了所有的功能的开发 ...

  3. Spring AOP的一些概念

            切面(Aspect): 一个关注点的模块化,这个关注点可能会横切多个对象.事务管理是J2EE应用中一个关于横切关注点的很好的例子. 在Spring AOP中,切面可以使用通用类(基于模 ...

  4. Spring AOP与IOC

    Spring AOP实现日志服务 pom.xml需要的jar <dependency><groupId>org.apache.commons</groupId>&l ...

  5. Spring AOP与IOC以及自定义注解

    Spring AOP实现日志服务 pom.xml需要的jar <dependency><groupId>org.apache.commons</groupId>&l ...

  6. Spring Aop的应用

    2019独角兽企业重金招聘Python工程师标准>>> AOP的基本概念 连接点( Jointpoint) : 表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化.方法执行 ...

  7. Spring AOP详解(转载)所需要的包

    上一篇文章中,<Spring Aop详解(转载)>里的代码都可以运行,只是包比较多,中间缺少了几个相应的包,根据报错,几经百度搜索,终于补全了所有包. 截图如下: 在主测试类里面,有人怀疑 ...

  8. 关于spring aop Advisor排序问题

    关于spring aop Advisor排序问题 当我们使用多个Advisor的时候有时候需要排序,这时候可以用注解org.springframework.core.annotation.Order或 ...

  9. 利用spring aop统一处理异常和打日志

    利用spring aop统一处理异常和打日志 spring aop的概念,很早就写博客介绍了,现在在工作中真正使用. 我们很容易写出的代码 我们很容易写出带有很多try catch 和 logger. ...

  10. 我所理解的Spring AOP的基本概念

    Spring AOP中的概念晦涩难懂,读官方文档更是像读天书,看了很多例子后,写一些自己理解的一些spring的概念.要理解面向切面编程,要首先理解代理模式和动态代理模式. 假设一个OA系统中的一个功 ...

最新文章

  1. LeetCode:Permutations II
  2. 每日一皮:程序员穿着图解析
  3. c-nominated = ((rcheck-use_candidate) || c-nominated);
  4. 前端学习(586):在元素中动态添加类与伪类
  5. CSS自定义属性(CSS变量)
  6. 虚拟机VMware搭建代码环境
  7. 怎样追求一个你喜欢的人?
  8. 《avascript 高级程序设计(第三版)》 ---第三章 基本概念2
  9. OpenCV图像处理基础操作(1)
  10. 11g oracle 客户端驱动_oracle odbc driver configuration(oracle 11g odbc驱动程序) 64位/32位
  11. linux 小巧的浏览器,Linux奇技淫巧:一款特别轻量级的网页浏览器
  12. SAS 入门(二)实战篇
  13. 随机过程的均值函数、自相关函数、协方差函数
  14. SQL Server中默认的数据库及作用
  15. LeetCode: 868. Binary Gap
  16. Anaconda安装报错(Failed to create Anaconda menus)
  17. 性价比高的骨传导耳机,国产top1品牌推荐
  18. 多可文档管理系统,我的文档是什么?
  19. AMD的复兴之路 发力ARM服务器芯片
  20. 物联网调查报告:机遇与挑战

热门文章

  1. Power Strings POJ - 2406(求一串字符串中有多少个循环节)
  2. matlab中图像轮廓变细,Matlab中,用bwmorph函数提取二进制图像的轮廓
  3. java8 stream案例分析
  4. iis php打开空白页,windows+IIS+php 访问显示空白页 php版本信息访问正常
  5. java蝇量模式_Head First设计模式——蝇量和解释器模式
  6. P2839 [国家集训队]middle 二分 + 主席树 在值域上建区间
  7. Unfair contest(个人做法)
  8. Acwing 1083. Windy数
  9. CodeForces - 616D Longest k-Good Segment
  10. [指数型生成函数专练]chocolate,红色病毒问题,排列组合,字串数