【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(一) 原型和继承一文中说过下面写篇闭包,加之最近越 ...
随机推荐
- 四则运算————javaweb版
1.设计思路: 定义一个类arithmetic,在该类中的定义相关成员,随机产生的题目以及答案用数组承接,在第一个jsp里面用户输入题目数量以及设置做题时间,将这两个数传到第二个jsp页面,在此页面定 ...
- 微信小程序使用npm安装第三方库
微信小程序在 2.2.1 版本后增加了对 npm 包加载的支持,使得小程序支持使用 npm 安装第三方包. 之前在微信开发者工具选择“构建npm”会报错“没找到node_modules”目录”,这是因 ...
- Nginx与安全有关的几个配置
Nginx与安全有关的几个配置 原创: 37丫37 运维咖啡吧 昨天 安全无小事,安全防范从nginx配置做起 上一篇文章<Nginx的几个常用配置和技巧>收到了不错的反馈,这里再总结下n ...
- koa2+mysql+vue实现用户注册、登录、token验证
说明: node.js提供接口,vue展现页面,前后端分离,出于编辑器功能和编辑习惯,vue用HbuilderX,node.js用VScode.(PS:仅作为学习笔记,如有不当之处欢迎指出,在此先谢为 ...
- [LeetCode] 483. Smallest Good Base 最小的好基数
For an integer n, we call k>=2 a good base of n, if all digits of n base k are 1. Now given a str ...
- 热情组——项目冲刺 Day5
项目相关 作业相关 具体描述 班级 班级链接 作业要求 链接地址 团队名称 热情组 作业目标 实现软件制作,以及在福大的传播 Github链接 链接地址 SCRUM部分: 成员昵称 昨日目标 开始时间 ...
- 团队作业第五次—项目冲刺-Day4
Day4 part1-SCRUM: 项目相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 hunter--冲刺集合 团队名称 hunte ...
- R语言学习基础一
笔者使用Rstudio编写R程序,本文主要总结在编写过程中遇到的一些实际 问题 与学习配套的的code上传到我的github,网址: https://github.com/LIU-HONGYANG/S ...
- java登录点击验证码图片切换验证码无效
1.问题:我在写一个登录时需要添加一个验证码的功能,但是第一次可以生成验证码,但是点击的时候无法发起请求. 2.解决方案:在请求地址后面加一个时间戳,保证每次请求都不一样就可以了! window.on ...
- OpenCV vs. Armadillo vs. Eigen on Linux
OpenCV vs. Armadillo vs. Eigen on Linux From:http://nghiaho.com/?p=936 In this post I’ll be comparin ...