zoukankan      html  css  js  c++  java
  • 大白话AOP

    工作一年多后, 第二次看了韩顺平老师讲的AOP (11年的Spring 教学视频)

    AOP还是比较艰涩的东西. 从刚开始 碰Java项目去找书看开始, 到学了拦截器知道AOP就是处理事务, 日志, 安全等东西的机制,但对那些名词还是不懂.

    目录:

    1. 从消除重复代码讲起.

    1.5 到专注业务

    2. 图解AOP

    2.5不用AOP也能有设计模式来搞定

    3. 说人话的概念

    1. Spring 官方文档介绍AOP是以"让我们了解AOP的一些核心概念"开始的, 一上来就糊你一脸概念:  什么切面(aspect), 动态代理(dynamic proxy), 连接点, 切入点, 目标对象(target)

      小白就是这么被吓跑的(笑), 说的就是我.

      从简单的, 亲和力更好的角度(方面?)入手, 让我们从"重复代码"的角度来介绍AOP.

      在备受推崇的<重构:改善既有代码的设计> 和 <代码整洁之道> 两本书中, 重复代码duplicate code是一种罪恶. "没有重复代码"的重要程度仅次于"通过所有测试".

      (注: 评价clean code 的标准 1. 通过所有测试 2.没有重复代码 3. 体现系统中的全部设计理念 4. 包括尽量少的实体(类,方法,函数))

      

      没错, AOP是一种消除重复代码的手段.

      举个栗子: A service 需要事务, B service 也需要打开事务.

    Class ServiceA {
      void methodA() {
        // 打开事务
       // 干活儿
        // 提交事务
      }   
    }

      同样的代码在ServiceB也有.

      这就有bad smell了, 两个方法体分别是XAY和XBY,显然,这出现了重复,违反了DRY原则(dont repeat yourself)。  

      Here comes AOP.

          1.  AOP 把事务这种"重复代码" 从ServiceA, ServiceB抽出来, 把重复代码只放在一个地方(另一个类中).

          2. AOP 再把抽出来的东西放回去

       通过这样一波操作, 重复代码(可以使打日志, 开关事务, 鉴权等)已经背分离出来, 并且没有重复了.

    1.5 何来专注业务一说?

      琐碎的非业务代码: 记日志, 鉴权, 事务等操作都和业务代码没直接关系, 通过抽取(Extraction)的方式, 从业务代码分离, 进而分离了业务的复杂度.

           原来的代码变成

     void methodA() {
        // 打开事务
       // 干活儿
        // 提交事务
      }  

           只有一行业务代码, 更方便阅读

    2. 图解AOP

      从消除重复代码的角度, 我们可以对AOP有一个感性的认识.  然后看图学一下AOP的原理。

       

    2.5 不用AOP也能有设计模式来搞定

       只是利用抽出非业务代码来分离复杂度的话, 其实就设计模式在搞这个的

       模板方法模式

       甚至直接抽方法 把非业务代码独立成一个方法都能取得同样的效果。

       不一定要AOP来实现。

    3.说人话的概念

      最后讲AOP中概念

           切面: Aspect: 日志, 事务, 鉴权

           目标对象:target:放着业务代码

           代理对象: 对target的动态代理

           通知:Advice: 非业务代码, 用来织入到业务代码中

           织入: weave 把通知(advice)放到代理对象中的连接点

           连接点 Joint point: 可以插入通知代码的位置

           插入点 Pointcut: 没插入时叫连接点, 插入后就叫插入点

                                        插入点和连接点只是看问题的角度不同

  • 相关阅读:
    GRIDVIEW导出到EXCEL
    .NET GRIDVIEW导出EXCEL
    C#自动列宽
    vue 路由跳转及传值和取值
    vue 部署windows nginx服务上
    vue多个代理配置vue.config
    mock常用规则
    git基础篇-常见错误
    git基础篇-使用教程
    win10 gitserver搭建
  • 原文地址:https://www.cnblogs.com/longwaytogo/p/8896356.html
Copyright © 2011-2022 走看看