• sprignAOP那些术语


    那些AOP术语


    初看这么多术语,一下子都不好接受,慢慢来,很快就会搞懂。
    通知、增强处理(Advice) 就是你想要的功能,也就是上说的安全、事物、日志等。你给先定义好,然后再想用的地方用一下。包含Aspect的一段处理代码


    连接点(JoinPoint) 这个就更好解释了,就是spring允许你是通知(Advice)的地方,那可就真多了,基本每个方法的前、后(两者都有也行),或抛出异常是时都可以是连接点,spring只支持方法连接点。其他如AspectJ还可以让你在构造器或属性注入时都行,不过那不是咱们关注的,只要记住,和方法有关的前前后后都是连接点。

    切入点(Pointcut) 上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有十几个连接点了对吧,但是你并不想在所有方法附件都使用通知(使用叫织入,下面再说),你只是想让其中几个,在调用这几个方法之前、之后或者抛出异常时干点什么,那么就用切入点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。
    切面(Aspect) 切面是通知和切入点的结合。现在发现了吧,没连接点什么事,链接点就是为了让你好理解切点搞出来的,明白这个概念就行了。通知说明了干什么和什么时候干(什么时候通过方法名中的befor,after,around等就能知道),二切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。
    引入(introduction) 允许我们向现有的类添加新方法属性。这不就是把切面(也就是新方法属性:通知定义的)用到目标类中吗
    目标(target) 引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,他可以在毫不知情的情况下,被咋们织入切面。二自己专注于业务本身的逻辑。
    代理(proxy) 怎么实现整套AOP机制的,都是通过代理,这个一会儿给细说。
    织入(weaving) 把切面应用到目标对象来创建新的代理对象的过程。有三种方式,spring采用的是运行时,为什么是运行时,在上一文《Spring AOP开发漫谈之初探AOP及AspectJ的用法》中第二个标提到。
    目标对象 – 项目原始的Java组件。
    AOP代理  – 由AOP框架生成java对象。
    AOP代理方法 = advice + 目标对象的方法。


    @Aspect //声明切面,标记类
    public class Audience {

    @Pointcut("execution(* *.perform(..))") //定义切点,标记方法
    public void performance() {}

    @Before("performance()") //切点之前执行
    public ....

    @AfterReturning("performance()") //切点之后执行
    public ...

    @AfterThrowing("performance()") //切点抛出异常后执行
    public ...


    ======================================

    什么是面向切面编程

    横切关注点:影响应用多处的功能(安全、事务、日志)

    切面:

    横切关注点被模块化为特殊的类,这些类称为切面

    优点:

    每个关注点现在都集中于一处,而不是分散到多处代码中 
    服务模块更简洁,服务模块只需关注核心代码。

    AOP 术语

    • 通知: 
      • 定义:切面也需要完成工作。在 AOP 术语中,切面的工作被称为通知。
      • 工作内容:通知定义了切面是什么以及何时使用。除了描述切面要完成的工作,通知还解决何时执行这个工作。
      • Spring 切面可应用的 5 种通知类型:
    1. Before——在方法调用之前调用通知
    2. After——在方法完成之后调用通知,无论方法执行成功与否
    3. After-returning——在方法执行成功之后调用通知
    4. After-throwing——在方法抛出异常后进行通知
    5. Around——通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为
    • 连接点: 
      • 定义:连接点是一个应用执行过程中能够插入一个切面的点。
      • 连接点可以是调用方法时、抛出异常时、甚至修改字段时、
      • 切面代码可以利用这些点插入到应用的正规流程中
      • 程序执行过程中能够应用通知的所有点。
    • 切点: 
      • 定义:如果通知定义了“什么”和“何时”。那么切点就定义了“何处”。切点会匹配通知所要织入的一个或者多个连接点。
      • 通常使用明确的类或者方法来指定这些切点。
      • 作用:定义通知被应用的位置(在哪些连接点)
    • 切面: 
      • 定义:切面是通知和切点的集合,通知和切点共同定义了切面的全部功能——它是什么,在何时何处完成其功能。
    • 引入: 
      • 引入允许我们向现有的类中添加方法或属性
    • 织入: 
      • 织入是将切面应用到目标对象来创建的代理对象过程。
      • 切面在指定的连接点被织入到目标对象中,在目标对象的生命周期中有多个点可以织入
      1. 编译期——切面在目标类编译时期被织入,这种方式需要特殊编译器。AspectJ的织入编译器就是以这种方式织入切面。
      2. 类加载期——切面在类加载到
      3. JVM ,这种方式需要特殊的类加载器,他可以在目标类被引入应用之前增强该目标类的字节码。AspectJ5 的 LTW 就支持这种织入方式
      4. 运行期——切面在应用运行期间的某个时刻被织入。一般情况下,在织入切面时候,AOP 容器会为目标对象动态的创建代理对象。Spring AOP 就是以这种方式织入切面。



  • 相关阅读:
    【crontab】误删crontab及其恢复
    New Concept English there (7)
    New Concept English there (6)
    New Concept English there (5)
    New Concept English there (4)
    New Concept English there (3)
    New Concept English there (2)Typing speed exercise
    New Concept English there (1)Typing speed exercise
    New Concept English Two 34 game over
    New Concept English Two 33 94
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/11044292.html
Copyright © 2020-2023  润新知