zoukankan      html  css  js  c++  java
  • Atitit aop的一些资料 目录 2. AOP(面向切面) 1 2.1.   切面(Aspect):其实就是共有功能的实现。如日志切面、权限切面、事务切面等 2 2.2.   通知(Advice

    Atitit aop的一些资料

     

    目录

    2. AOP(面向切面) 1

    2.1.   切面(Aspect):其实就是共有功能的实现。如日志切面、权限切面、事务切面等 2

    2.2.   通知(Advice):是切面的具体实现。前置通知(Before)、后置通知(AfterReturning)环绕通知(Around) 2

    2.3.   连接点(Joinpoint):就是程序在运行过程中能够插入切面的地点。 2

    2.4. 切入点(Pointcut):用于定义通知应该切入到哪些连接点上。 3

    3. 切入方式 3

    3.1. 按照某个注解 3

    1.  
    2. AOP(面向切面)

     

     

    在传统的编写业务逻辑处理代码时,我们通常会习惯性地做几件事情:日志记录、事务控制及权限控制等,然后才是编写核心的业务逻辑处理代码。当代码编写完成回头再看时,不禁发现,扬扬洒洒上百行代码中,真正用于核心业务逻辑处理才那么几行,如图6-4所示。方法复方法,类复类,就这样子带着无可奈何遗憾地度过了多少个春秋。这倒也罢,倘若到了项目的尾声,突然决定在权限控制上需要进行大的变动时,成千上万个方法又得一一"登门拜访",痛苦"雪上加霜"。

     

     

     

     如果能把图6-4中众多方法中的所有共有代码全部抽取出来,放置到某个地方集中管理,然后在具体运行时,再由容器动态织入这些共有代码的话,最起码可以解决两个问题:

     

      1. Java EE程序员在编写具体的业务逻辑处理方法时,只需关心核心的业务逻辑处理,既提高了工作效率,又使代码变更简洁优雅。

     

      2. 在日后的维护中由于业务逻辑代码与共有代码分开存放,而且共有代码是集中存放的,因此使维护工作变得简单轻松。

     

     

     

    面向切面编程AOP技术就是为解决这个问题而诞生的,切面就是横切面,如图6-5所示,代表的是一个普遍存在的共有功能,例如,日志切面、权限切面及事务切面等:

     

     

     

      下面我们以用户管理业务逻辑组件UserService的AOP实现过程(见图6-6)为例,深度剖析一下AOP技术的实现原理。AOP技术是建立在Java语言的反射机制与动态代理机制之上的。业务逻辑组件在运行过程中,AOP容器会动态创建一个代理对象供使用者调用,该代理对象已经按Java EE程序员的意图将切面成功切入到目标方法的连接点上,从而使切面的功能与业务逻辑的功能同时得以执行。从原理上讲,调用者直接调用的其实是AOP容器动态生成的代理对象,再由代理对象调用目标对象完成原始的业务逻辑处理,而代理对象则已经将切面与业务逻辑方法进行了合成。

     

     

     

    现将图6-6中涉及到的一些概念解释如下。

     

      1.   切面(Aspect):其实就是共有功能的实现。如日志切面、权限切面、事务切面等

    。在实际应用中通常是一个存放共有功能实现的普通Java类,之所以能被AOP容器识别成切面,是在配置中指定的。

     

      1.   通知(Advice):是切面的具体实现。前置通知(Before)、后置通知(AfterReturning)环绕通知(Around)

    以目标方法为参照点,根据放置的地方不同,可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)与环绕通知(Around)5种。在实际应用中通常是切面类中的一个方法,具体属于哪类通知,同样是在配置中指定的。

     

      1.   连接点(Joinpoint):就是程序在运行过程中能够插入切面的地点。

    例如,方法调用、异常抛出或字段修改等,但Spring只支持方法级的连接点。

     

      1. 切入点(Pointcut):用于定义通知应该切入到哪些连接点上。

    不同的通知通常需要切入到不同的连接点上,这种精准的匹配是由切入点的正则表达式来定义的。

     

      目标对象(Target):就是那些即将切入切面的对象,也就是那些被通知的对象。这些对象中已经只剩下干干净净的核心业务逻辑代码了,所有的共有功能代码等待AOP容器的切入。

     

      代理对象(Proxy):将通知应用到目标对象之后被动态创建的对象。可以简单地理解为,代理对象的功能等于目标对象的核心业务逻辑功能加上共有功能。代理对象对于使用者而言是透明的,是程序运行过程中的产物。

     

      织入(Weaving):将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期,当然不同的发生点有着不同的前提条件。譬如发生在编译期的话,就要求有一个支持这种AOP实现的特殊编译器;发生在类装载期,就要求有一个支持AOP实现的特殊类装载器;只有发生在运行期,则可直接通过Java语言的反射机制与动态代理机制来动态实现。

     

     

     

    综上所述:AOP(面向切面)其实就是将一个程序所需要用到的所有共有代码全部抽取出来,放置到某个地方集中管理,然后在具体运行时,再由容器动态织入这些共有代码。

    ---------------------

     

     

    1. 切入方式

    按照package 类切入

     

    按照某个方法切入

     

      1. 按照某个注解
    •  

    有一个 @Transactional 注解的目标对象中的任意连接点(在Spring AOP中只是方法执行)

    •  

    @target(org.springframework.transaction.annotation.Transactional)

    • '@target' 也可以在binding form中使用:请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。
    •  

    任何一个目标对象声明的类型有一个 @Transactional 注解的连接点(在Spring AOP中只是方法执行)

    •  

    @within(org.springframework.transaction.annotation.Transactional)

    • '@within'也可以在binding form中使用:- 请常见以下讨论通知的章节中关于如何使得annotation对象可以在通知体内访问到的部分。
    •  

    任何一个执行的方法有一个 @Transactional annotation的连接点(在Spring AOP中只是方法执行)

    •  

    @annotation(org.springframework.transaction.annotation.Transactional)

    •  

     

     

    pointcut 切面表达式 切入点表达式 - duenboa - 博客园.html

  • 相关阅读:
    739. Daily Temperatures
    556. Next Greater Element III
    1078. Occurrences After Bigram
    1053. Previous Permutation With One Swap
    565. Array Nesting
    1052. Grumpy Bookstore Owner
    1051. Height Checker
    数据库入门及SQL基本语法
    ISCSI的概念
    配置一个IP SAN 存储服务器
  • 原文地址:https://www.cnblogs.com/attilax/p/15197457.html
Copyright © 2011-2022 走看看