AOP 基本术语及其在 Spring 中的实现
无论是 Spring 还是其他支持 AOP(Aspect Oriented Programming)的框架,尤其是 Spring 这种基于 Java(彻底的面向对象)的语言,在实现 AOP 时,首先为 AOP 这一编程思想,定义一些基本概念,基本术语,基本流程。
1. AOP 术语
Advice:通知。用于修饰某个方法(代表业务),切面是独立于业务的的。AOP 就是尽可能降低目标方法和切面的耦合关系。
- 切面的目标 —— 必须要完成的工作。切面的工作就被称为通知;
通知定义了什么是切面(what),也即切面的工作(职责所在),还描述了何时(when)执行这个工作,
时序上,Spring 切面支持如下 5 种类型的通知:
- 前置(型)通知(Before),在目标方法被调用之前调用通知功能;
- 后置(型)通知(After),在目标方法完成之后(不保证成功还是抛异常)调用通知,此时不会关心方法的输出是什么?
- 返回(型)通知(After-returning),在目标方法成功执行之后调用通知;
- 异常(型)通知(After-throwing),在目标方法抛出异常之后调用通知;
- 环绕(型)通知(Around),通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为;
- 连接点(Join point):连接点是在应用执行过程中,能够插入切面的一个点。
- 这个点可以是在调用方法时,抛出异常时,甚至修改一个字段时;
- 切面代码可以利用这些点插入到应用的正常流程中,并添加新的行为;
- Pointcut(切点),通知定义了切面的“什么”(what)和“何时”(when)的话,那么切点就定义了位置(where,何处)
- 切点(切入点),其定义会去匹配所要织入(weaving)的一个或多个连接点,
- 切面(Aspect):通知和切点共同定义了切面的全部内容;
- 它是什么,在何时何处完成其功能;
2. Spring 对 AOP 的支持
并非所有的 AOP 框架都是相同的,它们在连接点模型(Join Point Model)上可能有强弱(程度)之分。有些允许在字段修饰符级别应用通知,而另一些只支持与方法调用相关的连接点。它们被织入(weaving)切面的方式和时机(timing)也有所不同。但是无论如何不同和变化,在实现方式上,创建切点(poincut)来定义切面所织入的连接点是 AOP 框架的基本功能。
AOP 基本术语及其在 Spring 中的实现的更多相关文章
- 学习spring中遇见的问题
报错: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nes ...
- 阶段3 2.Spring_08.面向切面编程 AOP_2 spring中的aop术语和细节
基于接口的动态代理要求,要去被代理对象最少实现一个接口 基于子类的动态代理没有实现接口的要求.但是要求我们的被代理类不能是最终类 在Spring中可以选择基于接口还是子类的动态代理 术语 大白话.业务 ...
- Spring代理模式及AOP基本术语
一.代理模式: 静态代理.动态代理 动态代理和静态代理区别?? 解析:静态代理需要手工编写代理类,代理类引用被代理对象. 动态代理是在内存中构建的,不需要手动编写代理类 代理的目的:是为了在原有的方法 ...
- Spring 代理模式及AOP基本术语
一.代理模式: 静态代理.动态代理 动态代理和静态代理区别?? 解析:静态代理需要手工编写代理类,代理类引用被代理对象. 动态代理是在内存中构建的,不需要手动编写代理类 代理的目的:是为了在原有的方法 ...
- Spring学习(二)——Spring中的AOP的初步理解[转]
[前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring. ...
- Spring中的AOP
什么是AOP? (以下内容来自百度百科) 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...
- 浅谈spring中AOP以及spring中AOP的注解方式
AOP(Aspect Oriented Programming):AOP的专业术语是"面向切面编程" 什么是面向切面编程,我的理解就是:在不修改源代码的情况下增强功能.好了,下面在 ...
- Spring AOP相关术语
---------------------siwuxie095 Spring AOP 相关术语 (1)Joinpoint ...
- Spring学习(二)——Spring中的AOP的初步理解
[前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...
随机推荐
- POJ-2386Lake Counting,搜索题。。
Lake Counting Time Limit: 1000MS Memory Limit: 65536K Description Due to recent rains, w ...
- UVA10673 上下界问题
#include <iostream> #include<cstdio> using namespace std; #define LL long long LL a,b,m, ...
- 关于系统中使用多个PropertyPlaceholderConfigurer的配置
多数的鲜为人知方法都是因为有着罕见的应用,就比如说Spring中PropertyPlaceholderConfigurer这个类,它是用来解析Java Properties属性文件值,并提供在spri ...
- 巴蜀4384 -- 【模拟试题】作诗(Poetize)
Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M次, ...
- B. Restaurant--cf579B (贪心)
http://codeforces.com/problemset/problem/597/B 把右节点从小到大排序 在跑一遍就行了 #include <iostream> #includ ...
- 【Nginx】处理用户请求
实际处理请求的方法ngx_http_mytest_handler(在配置配置项的回调方法中被调用(用于解析配置项))将接收一个ngx_http_request_t类型的参数,返回一个ngx_int_t ...
- Android之怎样实现滑动页面切换【Fragment】
Fragment 页面切换不能滑动 所以对于listview 能够加入的左右滑动事件 .不会有冲突比如(QQ的好友列表的删除) Fragment 和viewpager 的差别 Viewpager ...
- 什么是WPF? 秒懂 !
一開始听到WPF.认为非常陌生.在百度百科等地方看完简单介绍之后.感觉更深奥.各种不懂啊! 在简单做了几个页面之后,发现.原来如此! So Easy 但又So Magic. 为什么说它简单?由于它简直 ...
- B-Tree 索引和 Hash 索引的对照
对于 B-tree 和 hash 数据结构的理解可以有助于预測不同存储引擎下使用不同索引的查询性能的差异.尤其是那些同意你选择 B-tree 或者 hash 索引的内存存储引擎. B-Tree 索引的 ...
- PAT-PAT (Advanced Level) Practise 1001. A+B Format (20) 【二星级】
题目链接:http://www.patest.cn/contests/pat-a-practise/1001 题面: 1001. A+B Format (20) Calculate a + b and ...