• AOP通过提供程序设计的另一种思路扩展了OOP,OOP的核心元素是class,而AOP的核心是Aspect。
  • Aspect使得关注点模块化。
  • AOP是spring的核心模块。虽然LOC容器不依赖AOP,但AOP通过提供非常有效的中间件解决方案扩展了IOC容器。
  • Spring2.0引入了 @AspectJ样式(更简洁、有效的书写自定义Aspect)

5.1 AOP概念

  • 这些概念不是spring的特性。
  • 方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。Aspect用spring的 Advisor或拦截器实现。
  • 连接点(Joinpoint): 程序执行过程中明确的点,如方法调用或特定的异常被抛出。
  • 通知(Advice): 在特定连接点AOP框架执行的动作。许多AOP框架包括Spring都是以拦截器做通知模型,维护一个“围绕”连接点的拦截器链。Spring中定义了四个advice: BeforeAdvice, AfterAdvice, ThrowAdvice和DynamicIntroductionAdvice
  • 切点(Pointcut): 指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切点:例如,使用正则表达式。 Spring定义了Pointcut接口,用来组合MethodMatcher和ClassFilter,可以通过名字很清楚的理解, MethodMatcher是用来检查目标类的方法是否可以被应用此通知,而ClassFilter是用来检查Pointcut是否应该应用到目标类上
  • AOP代理(AOP Proxy): AOP框架创建的对象。 在Spring中AOP代理可以是JDK动态代理或CGLIB代理。
  • 织入(Weaving): 组装Aspect来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯JavaAOP框架一样,在运行时完成织入。
    spring中advice的type
  • Before(BeforeAdvice):在连接点之前运行,但不可阻止执行流到达连接点(触发它本身抛出异常)
  • After returning:在连接点完成后执行(比如方法正常返回时)
  • After throwing:方法抛异常时执行
  • After (finally):不管连接点是否正常退出,都会执行
  • Around:环绕,可以再方法触发前后实现自定义行为,也可以决定是否要执行连接点或者返回自己的返回值(以及异常)来提前中断连接点执行。
  • Around是最强大的advice类型,spring建议使用可以达到目的的最小效能类型。举个栗子,如果需要更新方法返回值的缓存,最好使用After而不是Around,尽管后者也能达到目的。使用更简化的type能提供更简洁的编程模型,降低出错概率。
  • AOP的核心概念是切点匹配连接点,这区别于老式的消息监听策略。切点使得advice能够在独立于面向对象层级下被命中。

5.2 Spring AOP 的特性和目标

  • 纯JAVA实现,不需要控制类加载层级,因此适合在servlet容器和应用server中应用。
  • Spring AOP仅支持方法级别的连接点。字段级别不支持,如果需要可以使用AspectJ。
  • 与大多数AOP框架不同,Spring AOP的目标不是完全的实现AOP,而是将AOP实现与AOP容器更有效的集成起来。
  • Spring AOP从不想与AspectJ竞争,Spring确信任何基于代理的框架都可以相互补充而不是竞争。Spring通过AspectJ将Spring AOP和IOC容器无缝集成起来,是的所有AOP的应用都可以在spring应用架构内。
  • Spring框架的一个信条就是无侵入性,也就说使用者不应被强制引入框架内的类和接口(在业务逻辑中)。

5.3 AOP代理

  • Spring AOP默认使用标准JDK动态代理,可以代理所有的接口。也可以使用CGLIB代理,CGLIB可以代理非接口实现的业务对象。一般建议使用基于接口的编程。

5.4 @AspectJ

  • 该注解使得AspectJ语言可以使用。

5.4.1 @AspectJ支持

  • 为了在spring中使用@AspectJ aspects,需要need to enable Spring support for configuring Spring AOP based on @AspectJ aspects and auto-proxying beans based on whether or not they are advised by those aspects.
  • 通过自动代理,如果spring确定一个bean要被一个或多个aspects通知,它就会为这个bean自动生成一个代理来拦截方法调用,以确保通知被按需执行。
@Configuration
@EnableAspectJAutoProxy //使得@AspectJ支持java的@Configuration
public class AppConfig {
}

5.4.2 声明Aspect

Spring--官方文档部分翻译(第五章 面向Aspect的编程-AOP)相关推荐

  1. Spring官方文档中文翻译

    准备做个Spring官方文档全翻译专栏以下是大目录, 本翻译是基于Spring5 Core Technologies

  2. ElasticSearch Java High level Rest Client 官方文档中文翻译(一)

    ElasticSearch Java High level Rest Client 官方文档中文翻译 一 纯粹记录自己在看官网的es rest high level api 时的翻译笔记,可以对照着官 ...

  3. Pytorch官方文档英语翻译

    深度学习Pytorch-Pytorch官方文档英语翻译 1. a-e 1.1 span 跨度 1.2 blended 混合的 1.3 criterion 标准 1.4 deprecated 弃用的 1 ...

  4. python pymssql - pymssql模块官方文档的翻译

    译者注:译者博客(http://blog.csdn.net/lin_strong),转载请保留这条.此为pymssql模块version2.1.4官方文档的翻译,仅供学习交流使用,请勿用于商业用途. ...

  5. Spring 官方文档彩蛋

    Spring 官方文档彩蛋 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句 ...

  6. 【开源项目推荐】Android Jetpack 官方文档 中文翻译

    Jetpack 是 Android 软件组件的集合,使您可以更轻松地开发出色的 Android 应用.这些组件可帮助您遵循最佳做法.让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的 ...

  7. python的pymssql模块的报错_python pymssql - pymssql模块官方文档的翻译

    译者注:译者博客(http://blog.csdn.net/lin_strong),转载请保留这条.此为pymssql模块version2.1.4官方文档的翻译,仅供学习交流使用,请勿用于商业用途. ...

  8. CUDA10.0官方文档的翻译与学习之编程接口

    目录 背景 用nvcc编译 编译工作流 二进制适配性 ptx适配性 应用适配性 C/C++适配性 64位适配性 cuda c运行时 初始化 设备内存 共享内存 页锁主机内存 可移植内存 写合并内存 映 ...

  9. Spring官方文档下载

    Spring官方文档下载 最近准备弄弄 spring-batch,需要完整的资料,但是大部分都是零散的,于是准备下个官方文档: spring 官方文档下载 官方文档路径:https://docs.sp ...

最新文章

  1. 用AJAX实现无刷新的分页
  2. C++反汇编代码分析
  3. 验证电话号码是否正确
  4. JSTL标签引入(web基础学习笔记十八)
  5. 怎么查MATLAB中的newrbf,已经有了输入输出数据,如何在matlab中建立RBF神经网络
  6. 利用寄存器进入栈值交换
  7. CCF202009-5 密信与计数【AC自动机】(100分题解链接)
  8. 【纯干货】中国的支付清算体系是怎么玩的?
  9. 三星平板电脑html文件放在哪里,三星Tab3怎么连接电脑?三星Tab3平板电脑连接电脑的方法图解...
  10. CDN学习笔记二(技术详解)
  11. 饿百零售开放平台,测试账号饿了么显示该商家还没有上传商品
  12. 【打印机】连接共享打印机找不到网络路径解决方案
  13. 【多字典公共键】快速找到多个字典的公共键及非公共键
  14. drupal mysql hash密码_Drupal7管理员密码重置
  15. python实现熵权法
  16. php session fixation,聊聊session fixation attacks
  17. SpringBoot 3.0 来啦!
  18. 【NLP】情绪分析与酒店评论
  19. 友盟APM和bugly全面对比
  20. SVG——入门,路径变形动画

热门文章

  1. 出生年月日的html语句,出生年月日五行查询表
  2. 用示波器调出李萨如图形
  3. 看这篇就够了——ubuntu系统中的cuda cudnn cudatookit及pytorch使用
  4. 英特尔 超核芯显卡 620mac_显卡性能翻倍,AI能力加持:英特尔发布10代酷睿处理器...
  5. linux利用su -从普通用户切换root权限
  6. 2019 Multi-University Training Contest 7 部分补题
  7. SiTime硅晶振 高性能MEMS时钟方案在5G中的应用
  8. CSS 文字下划线间距
  9. AVPlayer 播放的时候有黑色边
  10. 如何设计账户余额的数据准确性?