AOP概述–什么是AOP


面向切面编程,能够让我们在不影响原有功能的前提下,为软件横向扩展功能 。AOP解决了OOP中遇到的一些问题,是OOP的延续和扩展。

什么是横向扩展?

软件项目中的三层架构分为持久层,业务层和表示层。当我们处理一个任务时,是从表示层开始到业务层再到持久层,这是一个纵向的过程。而横向的意思就是值针对其中的任意一层,对这一层的所有方法进行处理。
举例:在教学管理系统中,如果我们要查询所有的student,则需要先从表示层执行查询list方法,再去业务层执行list方法,再到持久层执行list方法。要查询所有的teacher,也是一样的过程。那我们现在要做一个操作,让不管哪个模块只要是执行了任何一个业务层的list方法时就抛出一个异常,这种半路插刀的方式就是横向扩展功能。


如上图所示:
当我们需要在许多类中添加相同逻辑(或记录等其他)代码的时候,一般我们编程会在每一个类中都写上这些代码。当需要修改的时候,我们又必须找出这些类来删除这些逻辑代码。
当我们需要这些逻辑代码指定到类中的某个方法前面执行,或者在方法后面执行,又或者我想指定在类的某一个位置去执行它,我们就要修改类了。
黑线为一个流程代码,红线为切入的代码。即在4个流程中固定位置插入了2个逻辑代码,如果你不需要的时候,你完全可以撤出红线代码,而要修改的话,也只需修改这三个类(红线)即可,因为主代码(黑线)和添加代码(红线)是没有耦合的,相当于插拔式的(此案例引用了之前读过的一篇博客,找不到原文了)。
这就是我们所说的AOP,AOP就是在某一个类或方法执行前后打个标记,声明在执行到这里之前要先执行什么,执行完这里之后要接着执行什么。插入了新的执行方法。


如果此出还是有不懂的朋友,可以看下一章更详细的AOP设计原理:

AOP概述(什么是AOP?)——Spring AOP(一)相关推荐

  1. 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)

    相关内容: 架构师系列内容:架构师学习笔记(持续更新) 一步一步手绘Spring IOC运行时序图一(Spring 核心容器 IOC初始化过程) 一步一步手绘Spring IOC运行时序图二(基于XM ...

  2. 在Intellij上面导入项目 AOP示例项目 AspectJ学习 Spring AoP学习

    为了学习这篇文章里面下载的代码:http://www.cnblogs.com/charlesblc/p/6083687.html 需要用Intellij导入一个已有工程.源文件原始内容也可见:link ...

  3. spring aop不执行_使用Spring AOP重试方法执行

    spring aop不执行 我的一位博客关注者发送了一封电子邮件,要求我显示" Spring AOP的RealWorld用法"示例. 他提到,在大多数示例中,都演示了Spring ...

  4. java aop管理权限_基于spring aop 权限管理系统原型 - andyj2ee - BlogJava

    此权限管理系统把待访问的业务层方法做为权限管理中的资源,通过spring aop 对接口方法进行拦截,来实现权限的管理,可以实现细粒度的权限控制. 在上文体验了spring aop 一些特性,aop ...

  5. spring aop实现过程之二Spring AOP中拦截器链

    1.开始步骤--获取AopProxy主流程 ProxyCreatorSupport.java /*** Subclasses should call this to get a new AOP pro ...

  6. Spring Aop 组件概述

    Spring Aop 概述 AOP(Aspect-Oriented Programming) 面向切面编程, 这种编程模型是在 OOP(Object-Oriented Programming) 的基础 ...

  7. Spring AOP概述及底层实现原理

    Spring AOP概述及底层实现原理 aop概述 AOP全称为Aspect Oriented Programming的缩写,意为:面向切面编程.将程序中公用代码进行抽离,通过动态代理实现程序功能的统 ...

  8. spring AOP 概述(一) Advice

    Advice通知 Advice(通知)定义在连接点做什么,为切面增强织入接口.在Spring AOP中,它主要描述Spring AOP 围绕方法调用而注入的切面行为.Advice是AOP联盟定义的一个 ...

  9. spring aop原理_Spring知识点总结!已整理成142页离线文档(源码笔记+思维导图)...

    写在前面 由于Spring家族的东西很多,一次性写完也不太现实.所以这一次先更新Spring[最核心]的知识点:AOP和IOC 无论是入门还是面试,理解AOP和IOC都是非常重要的.在面试的时候,我没 ...

  10. 比较Spring AOP和AspectJ

    1. 介绍 当前有多个可用的AOP库,这些库必须能够回答许多问题: 它与我现有的或新的应用程序兼容吗? 在哪里可以实施AOP? 它与我的应用程序集成的速度有多快? 性能开销是多少? 在本文中,我们将着 ...

最新文章

  1. 迈出编程第一步!必知必会的10个编程技巧及查错方法
  2. python3.6 messagebox_Python Tkinter GUI编程入门介绍
  3. matlab读入从文件中读取大量的数据
  4. 如何检查jQuery中是否已选中复选框?
  5. 简单的用Python实现学生信息管理
  6. 论文,成本管理与进度管理(主成本)
  7. python for循环文件每一行_python – 在使用for循环读取文件时跳过一行
  8. Spark优化一则 - 减少Shuffle
  9. Javascript三种创建对象的方法,new关键字,for...in 遍历对象
  10. 编写更加稳定、可读性强的JavaScript代码
  11. 信息检索 IR 中的评价指标
  12. MNIST数据集使用详解
  13. 软件工程毕设(二)·任务书
  14. 公差基本偏差代号_公差代号和公差带代号有什么区别?
  15. Win10 解决CSDN、阿里云国内站、小米商城国内站等国内网站打不开的问题(超详细教程)
  16. js获取当前是第几周
  17. 新生儿的一类(免费)疫苗(截止2019年)
  18. python决策树案例_决策树案例:基于python的商品购买能力预测系统
  19. Tesseract OCR简介(一)
  20. 微众AI产品经理熊猫杨:AI产品设计的6点心得体会

热门文章

  1. 在linux centos中加入中文输入法
  2. 【Gym - 101848D】XOR【多个数异或的典型问题】【费马小定理】
  3. PoisonApple:针对macOS的持久化工具
  4. Redis 在Golang中使用遇到的坑
  5. 关于Javascript表单验证
  6. Flume NG 配置详解(转)
  7. 《水晶报表自动补空行,补格线思路》 修正版 兼答Richard lee
  8. 揭开BootStrap的神秘面纱
  9. 展望Spring野心-Spring资源定位
  10. 达观数据郭权:用好ngResource和postman,提高你的开发调试效率