zoukankan      html  css  js  c++  java
  • spring学习笔记(三)我对AOP理解

    首先我们要知道AOP是什么?AOP全称Aspect OrientedProgramming,即面向切面编程。在这里我不想去说什么是切面,什么是切点,什么是通知等等,相关博客很多,如果大家想知道可以自己去查,这里我希望用图像加代码方式将这些抽象的概念具体化给读者,给自己也捋一捋思路。


    我们结合代码用图像一起说明,先看代码如下:

    // 假设我们现在有一个Person类,其中有一个eat的方法
    public class Person {
        private String name;
    
        public Person(String name){
            this.name = name
        }
    
        public void eat() {
            System.out.println(name + "正在吃饭........");
        }
    }
    
    // 我们在main函数中调用了这个方法,这也是我们的核心功能
    public class Main {
        public static void main(String[] args) {
            Person person = new Person("zhangsan");
            person.eat();
        }
    }

    我相信上面的代码不需要做解释。接下来假设我们要对所有person的eat方法统计耗时,我们的代码可能要变成这样

    public class Main {
        public static void main(String[] args) {
            StopWatch stopWatch = new StopWatch();
            Person person = new Person("zhangsan");
            stopWatch.start();
            person.eat();
            stopWatch.stop();
            long totalTimeMillis = stopWatch.getTotalTimeMillis();
            System.out.println("总耗时"+totalTimeMillis);
        }
    }

    现在我们整个程序可以用下面的图表示:

    假设我们现在要为我们为我们程序添加一个sing的方法,也要为这个方法添加耗时统计,这个时候我们的程序变成了下面这个样子

    两张图对比我们发现,耗时统计其实是我们系统的一个公用功能,并且不是我们的核心业务,如果我们想对eat方法一样,在方法执行前后执行一次时间采集,无疑是一种很低效的方法,而且代码的复用性也极差

    现在我们将耗时统计从我们的系统中抽离出来,用如下的图示意

    现在我们的目的是,在程序运行的工程中对eat方法跟sing进行性能监控,我们已经将性能监控的方法从我们系统中抽离出来了,现在要重新嵌进去,并且要适用于两个方法,该怎么做呢?

    其实我们要做到的目标可以用下图表示

    到这一步我相信大家应该会明白我想表达的意思了,我并不想去深究具体的概念,主要是帮助大家理解

    在这个图形中,其实性能监控对应的就是我们的通知(advice),eat方法与sing方法就是我们的切点,红色的我标明的就是切面,这只是个抽象的概念,我这样说也只是为了方便大家理解。其实我自己而言,我更愿意将图中eat方法所代表的直线与红色切面相交的点认作为切点,更多的时候,我更愿意以几何的方式来理解切面,切点的含义,这也是我写这篇文章的原因,有什么不对的希望大家多多指正~~

  • 相关阅读:
    springboot 项目使用阿里云短信服务发送手机验证码
    Vue中el-form标签中的自定义el-select下拉框标签
    解决jQuery中input 失去焦点之后,不能再获取到焦点
    Java操作Jxl实现数据交互。三部曲——《第三篇》
    Java操作Jxl实现数据交互。三部曲——《第二篇》
    springboot搭建项目,实现Java生成随机图片验证码。
    echarts 配置属性参考
    最近用到echarts tab 切换遇到问题 可以参考下
    单位px和em,rem的区别
    关于定位
  • 原文地址:https://www.cnblogs.com/daimzh/p/12854473.html
Copyright © 2011-2022 走看看