【Spring AOP】Spring AOP之你必须知道的AOP相关概念(1)
一、什么是AOP
AOP(Aspect-oriented Programming)即面向切面编程,是对OOP( Object-oriented Programming)即面向对象编程的一种补充,AOP是对程序结构的另一种思考。在OOP中的核心模块单元是Class类,而AOP中的核心单元是Aspect方面。Aspect方面支持跨多个Type类型和Object对象的关注点(例如事务管理)的模块化。(在AOP文献中,这样的关注点通常被称为“横切”关注点。)。
Spring提供了XML和@Aspect注解两种强有力的方式实现AOP。这两种风格都提供了完全类型化的advice和使用AspectJ pointcut 语言,来实现Spring AOP进行weaving编织。当然也可以通过更低级别的方式来实现,也就是通过底层API程序化实现。
Spring中的AOP主要体现在两个方面:
1.提供声明性企业服务。其中最重要的就是声明性事务管理。
2.让用户自己实现自定义的Aspects方面,来实现相关AOP的功能
二、AOP相关概念
让我们从定义一些核心的AOP概念和术语开始。这些术语不是特定于spring的。不幸的是,AOP术语不是特别直观。然而,如果Spring使用自己的术语,则会更加混乱。
1)Aspect(方面)
跨越多个类的横切关注点。在Spring AOP,事务管理是企业Java应用程序中横切关注点的一个很好的例子。可以通过@Aspect注解来实现一个Aspect类
2)Join point (连接点)
程序执行过程中的一个点也就是可以被拦截通知的地方,如方法的执行或异常的处理。在Spring AOP中,连接点总是表示方法执行。
3)Advice(通知)
在特定连接点上采取的操作。有不通类型的Advice,在Spring中有5种类型分别为Before,After,AfterReturning,AfterThrowing,Around。许多AOP框架,包括Spring,将通知建模为拦截器,并维护围绕连接点的拦截器链。
4)Pointcut (切入点)
匹配连接点的谓词。表示将通知与切入点表达式相关联,并在与切入点匹配的任何连接点上运行(例如,执行具有特定名称的方法)。连接点与切入点表达式匹配的概念是AOP的核心,Spring默认使用AspectJ切入点表达式语言。该概念的核心就是切入点表达式。
5)Introduction(介绍)
表示在不修改这个类的情况下,增加额外的方法或字段。Spring AOP允许您将新的接口(和相应的实现)引入任何被建议的对象。例如,您可以使用一个介绍来让一个bean实现一个IsModified接口,以简化缓存。(介绍在AspectJ社区中称为类型间声明。)
6)Target object (目标对象)
被一个或多个方面告知的对象。也称为“被通知对象”。
7)AOP proxy(AOP代理)
为了实现通知被AOP框架创建的代理对象。在Spring框架中,AOP代理是JDK动态代理或CGLIB代理。
8)Weaving(织入)
将方面与其他应用程序类型或对象链接以创建被通知的对象。这可以在编译时(例如,使用AspectJ编译器)、加载时或运行时完成。与其他纯Java AOP框架一样,Spring AOP在运行时执行编织。
三、通知类型介绍
1)Before advice
在被通知对象的方法调用之前执行,但是无法阻止被通知对象的方法被调用(除非抛异常)
2)After (finally) advice
被通知对象的方法调用完之后执行,无论被通知对象的方法以何种方式退出(正常或异常返回),都将执行通知。
3)After returning advice
被通知对象的方法正常完成后运行并可以拿到返回结果(如果一个方法没有抛出异常并返回)。
4)After throwing advice
如果一个方法通过抛出异常退出,则被执行
5)Around advice
围绕连接点(如方法调用)的通知。这是最有力的建议。Around通知可以在方法调用前后执行自定义行为。它还负责选择是继续到连接点,还是通过返回它自己的返回值或抛出异常来简化建议的方法执行。
【Spring AOP】Spring AOP之你必须知道的AOP相关概念(1)的更多相关文章
- 《你必须知道的.NET》读书笔记三:体验OO之美
此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.依赖也是哲学 (1)本质诠释:“不要调用我们,我们会调用你” (2)依赖和耦合: ①无依赖,无耦合 ...
- [你必须知道的.NET]第二十回:学习方法论
说在,开篇之前 本文,源自我回答刚毕业朋友关于.NET学习疑惑的回复邮件. 本文,其实早计划在<你必须知道的.NET>写作之初的后记部分,但是因为个中原因未能如愿,算是补上本书的遗憾之一. ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- (转)【推荐】初级.NET程序员,你必须知道的EF知识和经验
转自:http://www.cnblogs.com/zhaopei/p/5721789.html [推荐]初级.NET程序员,你必须知道的EF知识和经验 阅读目录 [本文已下咒.先顶后看,会涨 ...
- 《你必须知道的.NET》读书笔记一:小OO有大智慧
此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.对象 (1)出生:系统首先会在内存中分配一定的存储空间,然后初始化其附加成员,调用构造函数执行初 ...
- 《你必须知道的.NET》读书笔记二:小OO有大原则
此篇已收录至<你必须知道的.Net>读书笔记目录贴,点击访问该目录可以获取更多内容. 一.单一职责原则 (1)核心思想:一个类最好只做一件事,只有一个引起它变化的原因 (2)常用模式:Fa ...
- 《你必须知道的.NET》读书笔记:从Hello World认识IL
通用的语言基础是.NET运行的基础,当我们对程序运行的结果有异议的时候,如何透过本质看表面,需要我们从底层来入手探索,这时候,IL便是我们必须知道的基础. 一.IL基础概念 1.1 什么是IL? IL ...
- MVC中你必须知道的13个扩展点
MVC中你必须知道的13个扩展点 pasting 转:http://www.cnblogs.com/kirinboy/archive/2009/06/01/13-asp-net-mvc-extensi ...
- 前端开发必须知道的JS(二) 闭包及应用
http://www.cnblogs.com/ljchow/archive/2010/07/06/1768749.html 在前端开发必须知道的JS(一) 原型和继承一文中说过下面写篇闭包,加之最近越 ...
随机推荐
- 基于Intel OpenVINO的搭建及应用,包含分类,目标检测,及分割,超分辨
PART I: 搭建环境OPENVINO+Tensorflow1.12.0 I: l_openvino_toolkit_p_2019.1.094 第一步常规安装参考链接:https://docs.op ...
- Centos7下搭建NFS服务器与连接详解
一,环境介绍 本实验使用了两台centos7虚拟机,其中 服务器:192.168.1.188 客户端:192.168.1.189 二,实验步骤 192.168.1.1 ...
- 【UVA1303】Wall(凸包)
点此看题面 大致题意: 给你一个多边形,要求建一面墙使得墙上的点至少离多边形每个顶点\(R\)的距离,求最短的墙长. 考虑\(R=0\) 考虑当\(R=0\)时,所求的答案显然就是求得的凸包的周长. ...
- [LeetCode] 148. Sort List 链表排序
Sort a linked list in O(n log n) time using constant space complexity. Example 1: Input: 4->2-> ...
- python运维开发常用模块(三)DNS处理模块dnspython
1.dnspython模块介绍: dnspython(http://www.dnspython.org/)是Python实现的一个DNS 工具包,它支持几乎所有的记录类型,可以用于查询.传输并动态更新 ...
- PowerShell的异常处理办法
$ErrorActionPreference = 'Stop' Try{ # C:\xxx 不存在 Copy-Item C:\xxx -ErrorAction Stop } Catch ...
- fiddler抓包-6-Copy与Save常用技巧
前言 我们保存会话有什么用呢?很显然就是让开发知道整个接口的入参.出参的情况,不然你截个图我还得一个一个敲或者找回我的接口重新用postman请求一下,我不信会出错. 截图还不如复制粘贴接口url.参 ...
- PyQt5笔记之标签
标签 QLabel用于显示文本或图像.没有提供用户交互功能.标签的视觉外观可以通过各种方式进行配置,并且可以用于为另一个窗口小部件指定焦点助记键. 一个QLabel可以包含以下任意内容类型: 内容 设 ...
- defaults(默认配置)和mergeConfig(合并config方法)
axios学习笔记defaults(默认配置)和mergeConfig(合并config方法) 源码地址 找到入口文件 axios/lib/axios.js ... var mergeConfig = ...
- 单片机成长之路(51基础篇)- 024 基于 N76E003 的按键按键状态机
前端时间要用按键,搞了个状态机(如图): main.c #include <N76E003.H> #include <SFR_Macro.h> //N76E003 SFR寄存器 ...