无论是 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 中的实现的更多相关文章

  1. 学习spring中遇见的问题

    报错: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nes ...

  2. 阶段3 2.Spring_08.面向切面编程 AOP_2 spring中的aop术语和细节

    基于接口的动态代理要求,要去被代理对象最少实现一个接口 基于子类的动态代理没有实现接口的要求.但是要求我们的被代理类不能是最终类 在Spring中可以选择基于接口还是子类的动态代理 术语 大白话.业务 ...

  3. Spring代理模式及AOP基本术语

    一.代理模式: 静态代理.动态代理 动态代理和静态代理区别?? 解析:静态代理需要手工编写代理类,代理类引用被代理对象. 动态代理是在内存中构建的,不需要手动编写代理类 代理的目的:是为了在原有的方法 ...

  4. Spring 代理模式及AOP基本术语

    一.代理模式: 静态代理.动态代理 动态代理和静态代理区别?? 解析:静态代理需要手工编写代理类,代理类引用被代理对象. 动态代理是在内存中构建的,不需要手动编写代理类 代理的目的:是为了在原有的方法 ...

  5. Spring学习(二)——Spring中的AOP的初步理解[转]

      [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring. ...

  6. Spring中的AOP

    什么是AOP? (以下内容来自百度百科) 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),通过预编译方式和运行期动态代理实现程序功能的统一维护的一种 ...

  7. 浅谈spring中AOP以及spring中AOP的注解方式

    AOP(Aspect Oriented Programming):AOP的专业术语是"面向切面编程" 什么是面向切面编程,我的理解就是:在不修改源代码的情况下增强功能.好了,下面在 ...

  8. Spring AOP相关术语

    ---------------------siwuxie095                                 Spring AOP 相关术语         (1)Joinpoint ...

  9. Spring学习(二)——Spring中的AOP的初步理解

    [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...

随机推荐

  1. POJ-2773 Happy 2006,暴力2700ms+水过!

                                                         Happy 2006 这个题很可能会超时的,但我几乎暴力的方法2700ms+过了,可能是后台水 ...

  2. CentOS6 CentOS7 yum安装图形界面

    CentOS6 yum安装图形界面yum groupinstall -y "Desktop" "Desktop Platform" "Desktop ...

  3. [HDU2896]病毒侵袭(AC自动机)

    传送门 题目中文描述,赞! 除了val记录id以外就是模板. 注意:每次数组都要清0.0 ——代码 #include <cstdio> #include <queue> #in ...

  4. POJ 1741 树上 点的 分治

    题意就是求树上距离小于等于K的点对有多少个 n2的算法肯定不行,因为1W个点 这就需要分治.可以看09年漆子超的论文 本题用到的是关于点的分治. 一个重要的问题是,为了防止退化,所以每次都要找到树的重 ...

  5. Python基础教程笔记——第4章:字典

    字典 字典是Python唯一内建的数学映射类型,字典中的值没有特殊的顺序,键可以是数字,字符串,甚至是元组 字典的创建: 字典由键值对构成,字典中键是唯一的,而值不唯一.>>> a_ ...

  6. secure上传图片

    1.rz -bye 2.upload as ascii 去掉勾选框

  7. HDU 5514 容斥原理

    Frogs Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  8. CSS 空中飘动的云动画

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  9. httpclient请求去掉返回结果string中的多余转义字符

    public String doGet() { String uriAPI = "http://XXXXX?str=I+am+get+String"; String result= ...

  10. 从头开始学Android之(一)——— Android架构

    从事Android开发已经两年多了,最近项目上特别清闲,刚开始时在闲暇的时候都不知道干嘛,整天混日子.有一天突然有个以前同学找到我,说要我帮忙做一个Android的需求,就是在后台截屏(涉及到服务以及 ...