zoukankan      html  css  js  c++  java
  • Spring之AOP

    一、什么是AOP:

      面向切面的编程,即 AOP,是一种编程技术,它允许程序员对横切关注点或横切典型的职责分界线的行为(例如日志和事务管理)进行模块化。AOP 的核心构造是方面,它将那些影响多个类的行为封装到可重用的模块中。

      AOP 和 IOC 是补充性的技术,它们都运用模块化方式解决企业应用程序开发中的复杂问题。在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和 Java 类中才能实现日志功能。在 AOP 方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。当然,优势就是 Java 类不需要知道日志服务的存在,也不需要考虑相关的代码。所以,用 Spring AOP 编写的应用程序代码是松散耦合的。

      AOP 的功能完全集成到了 Spring 事务管理、日志和其他各种特性的上下文中。

     二、AOP的存在价值:

      AOP 专门用于处理系统中分布于各个模块中的交叉关注点的问题,在 Java EE 应用中,常常通过 AOP 来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP 已经成为一种非常常用的解决方案:

      左图:有时候开发人员会在不同方法复制黏贴相同的代码段。这样要是修改代码段里头某部分,就要全部修改方法中的代码。

      右图:将公共部分代码抽离出来,然后每个方法单独调用,这样无需改变每个方法的代码段,但是还是要修改每个方法。

      而AOP的功能在于我无需修改每个方法里头,通过AOP代理去动态改变方法。

    三、AOP的原理剖析

      AOP 代理其实是由 AOP 框架动态生成的一个对象,该对象可作为目标对象使用,AOP 代理所包含的方法与目标对象的方法如下图所示:

    四、AOP的关键概念

    以下是官方文档所给出的AOP的关键概念的解释:

      切面 - Aspect   类是对物体特征的抽象,切面就是对横切关注点的抽象

      连接点 - Join Point    被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器

      通知 - Advice    所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类

      切入点 - Point Cut    对连接点进行拦截的定义

      引入 - Introduction    在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段  

      目标对象 - Target Object    代理的目标对象

      AOP代理 - AOP Proxy

      织入 - Weaving    将切面应用到目标对象并导致代理对象创建的过程

    五、AOP通俗的理解:

      一个组件A,不关心其他常用的服务组件B,但是这个组件A使用组件B的时候,不是组件A自身去调用,而是通过配置等其他方式,比如Spring中可以通过xml配置文件。这样就使得A压根就不需要知道服务组件B是怎样的,爱存在不存在,爱怎么存在都与A无关。A只关心自己的业务逻辑,具体A使用B的时候,配置文件去做,与具体的A组件无关。

      更多参考:http://www.cnblogs.com/hongwz/p/5764917.html

     

     

     

  • 相关阅读:
    (转)Linux系统中sysctl命令详解 sysctl -p、sysctl -a、sysctl -w
    EM2 MP1 Vowel and Consonant Teacher:Ashley
    Phonics 自然拼读法 y,x,ch,sh,(voiced)th/ð/ ,(unvoiced) th/θ/ Teacher:Lamb
    java列表转成 int[] 的格式
    分类模型评估之ROC-AUC曲线和PRC曲线
    hive 抽样方法
    AUC理解
    Spark性能调优——基础篇
    scala 稀疏向量
    scala 建模
  • 原文地址:https://www.cnblogs.com/shawWey/p/6713642.html
Copyright © 2011-2022 走看看