Spring--官方文档部分翻译(第五章 面向Aspect的编程-AOP)
- 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)相关推荐
- Spring官方文档中文翻译
准备做个Spring官方文档全翻译专栏以下是大目录, 本翻译是基于Spring5 Core Technologies
- ElasticSearch Java High level Rest Client 官方文档中文翻译(一)
ElasticSearch Java High level Rest Client 官方文档中文翻译 一 纯粹记录自己在看官网的es rest high level api 时的翻译笔记,可以对照着官 ...
- Pytorch官方文档英语翻译
深度学习Pytorch-Pytorch官方文档英语翻译 1. a-e 1.1 span 跨度 1.2 blended 混合的 1.3 criterion 标准 1.4 deprecated 弃用的 1 ...
- python pymssql - pymssql模块官方文档的翻译
译者注:译者博客(http://blog.csdn.net/lin_strong),转载请保留这条.此为pymssql模块version2.1.4官方文档的翻译,仅供学习交流使用,请勿用于商业用途. ...
- Spring 官方文档彩蛋
Spring 官方文档彩蛋 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句 ...
- 【开源项目推荐】Android Jetpack 官方文档 中文翻译
Jetpack 是 Android 软件组件的集合,使您可以更轻松地开发出色的 Android 应用.这些组件可帮助您遵循最佳做法.让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的 ...
- python的pymssql模块的报错_python pymssql - pymssql模块官方文档的翻译
译者注:译者博客(http://blog.csdn.net/lin_strong),转载请保留这条.此为pymssql模块version2.1.4官方文档的翻译,仅供学习交流使用,请勿用于商业用途. ...
- CUDA10.0官方文档的翻译与学习之编程接口
目录 背景 用nvcc编译 编译工作流 二进制适配性 ptx适配性 应用适配性 C/C++适配性 64位适配性 cuda c运行时 初始化 设备内存 共享内存 页锁主机内存 可移植内存 写合并内存 映 ...
- Spring官方文档下载
Spring官方文档下载 最近准备弄弄 spring-batch,需要完整的资料,但是大部分都是零散的,于是准备下个官方文档: spring 官方文档下载 官方文档路径:https://docs.sp ...
最新文章
- 用AJAX实现无刷新的分页
- C++反汇编代码分析
- 验证电话号码是否正确
- JSTL标签引入(web基础学习笔记十八)
- 怎么查MATLAB中的newrbf,已经有了输入输出数据,如何在matlab中建立RBF神经网络
- 利用寄存器进入栈值交换
- CCF202009-5 密信与计数【AC自动机】(100分题解链接)
- 【纯干货】中国的支付清算体系是怎么玩的?
- 三星平板电脑html文件放在哪里,三星Tab3怎么连接电脑?三星Tab3平板电脑连接电脑的方法图解...
- CDN学习笔记二(技术详解)
- 饿百零售开放平台,测试账号饿了么显示该商家还没有上传商品
- 【打印机】连接共享打印机找不到网络路径解决方案
- 【多字典公共键】快速找到多个字典的公共键及非公共键
- drupal mysql hash密码_Drupal7管理员密码重置
- python实现熵权法
- php session fixation,聊聊session fixation attacks
- SpringBoot 3.0 来啦!
- 【NLP】情绪分析与酒店评论
- 友盟APM和bugly全面对比
- SVG——入门,路径变形动画
热门文章
- 出生年月日的html语句,出生年月日五行查询表
- 用示波器调出李萨如图形
- 看这篇就够了——ubuntu系统中的cuda cudnn cudatookit及pytorch使用
- 英特尔 超核芯显卡 620mac_显卡性能翻倍,AI能力加持:英特尔发布10代酷睿处理器...
- linux利用su -从普通用户切换root权限
- 2019 Multi-University Training Contest 7 部分补题
- SiTime硅晶振 高性能MEMS时钟方案在5G中的应用
- CSS 文字下划线间距
- AVPlayer 播放的时候有黑色边
- 如何设计账户余额的数据准确性?