AOP

AOP这一术语,近些年越发流行了。在java开发者社区里,学习使用Spring开发框架时,必定会涉及到AOP。不了解AOP不影响学习和使用Spring框架,不过在了解AOP之后,对于开发企业级应用则更加有利。本文视图以通俗的方式,整理一下AOP知识,以供初次接触的同行参考。

AOP与OOP

AOP的全称是 面向方面编程 (Aspect-Oriented Programming),这是Gregor Kiczales于1996年在PARC提出的一个术语。AOP是一种与OOP截然不同的看待应用程序结构的方式,按照AOP的观念,系统被分解为方面(aspect)或者关注点(concern),而不是对象。

这儿将AOP与OOP(面向对象编程 Object-Oriented Programming)相比较。Java开发者一般都比较熟悉OOP,大家都知道,OOP方式带来的最大好处就是代码复用,通过三大特性:封装、继承、多态,来复用代码。不过,若与AOP相比较,OOP的代码复用成程度,还差了那么一点儿。

代码复用

一般情况下,OOP能够很好地避免代码重复。具体继承可以帮助我们在不同类型之间共享相同的行为,多态可以让我们可以用相同的方式处理不同类型的对象,将注意力集中到它们的共同之处。但是,有些时候,我们无法用OOP避免代码重复,或者无法用OOP得到一个优雅的解决方案。

举一个很简单的栗子,假设我们有一个类,类里有一个公开方法是用来验证用户合法性的。那么这个公开方法,必然会其它很多类里被调用,而且调用方式都一样,伪代码如下ConcreteClassInstance.auth(userInstance)。虽然重复的地方只是这一行,但这种代码将毫无规律地散布在整个对象模型中,造成无法避免代码的重复。

这行代码的关注点,即方面,就是用户合法性校验。采用AOP的话,我们可以达到这样的效果:仅在一个地方声明:当某某条件发生时,进行用户合法性校验。权威一点的解释就是:我们可以单独编写用户和合法性校验的代码,将其包装成一个方面(aspect),然后我们可以告诉AOP实现产品,如何在将方面织入(weave)到程序流程之中。具体的织入策略也有好几种,比如:代码生成和预编译,动态字节码生成、JavaEE的动态代理。

横切性问题

AOP的目标是将横切行(crosscutting)的问题以一种更加通用的方式模块化,从而提升程序的模块化程度。什么是横切性问题?即一个关注点(比如用户合法性检查)的实现代码,散落在很多个类或方法之中。很多企业级问题都具有横切性,比如事物管理、安全性、资源相关操作。

关于AOP(面向方面的编程)相关推荐

  1. Spring 详解(三):AOP 面向切面的编程

    AOP即面向切面编程,它通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型. ...

  2. java aop面向切面编程

    最近一直在学java的spring boot,一直没有弄明白aop面向切面编程是什么意思.看到一篇文章写得很清楚,终于弄明白了,原来跟python的装饰器一样的效果.http://www.cnblog ...

  3. 【AOP 面向切面编程】Android Studio 使用 AspectJ 监控方法运行原理分析

    文章目录 一.查看使用 AspectJ 后生成的 Class 字节码类 二.AspectJ 的本质 一.查看使用 AspectJ 后生成的 Class 字节码类 在 Android Studio 中查 ...

  4. 【AOP 面向切面编程】Android Studio 中配置 AspectJ ( 下载并配置AS中 jar 包 | 配置 Gradle 和 Gradle 插件版本 | 配置 Gradle 构建脚本 )

    文章目录 一.AspectJ 下载 二.拷贝 aspectjrt.jar 到 Android Studio 三.配置 Gradle 和 Gradle 插件版本 四.配置 Gradle 构建脚本 一.A ...

  5. 【AOP 面向切面编程】AOP 简介 ( AspectJ 简介 | AspectJ 下载 )

    文章目录 一.AOP 简介 二.AspectJ 简介 三.AspectJ 下载 一.AOP 简介 AOP 是 Aspect Oriented Programming 的缩写 , 面向切面编程 ; 利用 ...

  6. 切面是异步还是同步操作‘_Autofac的AOP面向切面编程研究

    什么是AOP: 我的理解是 把系统性的编程工作封装起来 =>我给这个取个名字叫 "Aspect",然后通过AOP技术把它切进我们的业务逻辑代码 => "业务& ...

  7. Javascript aop(面向切面编程)之around(环绕)

    Aop又叫面向切面编程,其中"通知"是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在j ...

  8. 大数据WEB阶段Spring框架 AOP面向切面编程(一)

    Spring - AOP面向切面编程(一) 一.代理模式概述 代理的特点:(目标对象即被代理者) 实现和目标对象相同的接口 具备和目标对象的方法 代理者不仅要做目标对象的方法 , 还要做一些额外的操作 ...

  9. 大数据WEB阶段Spring框架 AOP面向切面编程(二)

    Spring AOP面向切面编程(二) 一.切入点的execution表达式 execution的表达形式: execution(修饰符? 返回值类型 所在包类? 方法名(参数列表) 异常?) ?表示 ...

  10. AOP(面向切面编程)大概了解一下

    前言 上一篇在聊MemoryCache的时候,用到了Autofac提供的拦截器进行面向切面编程,很明显能体会到其优势,既然涉及到了,那就趁热打铁,一起来探探面向切面编程. 正文 1. 概述 在软件业, ...

最新文章

  1. 【工具软件】Xmind的使用
  2. 想读博士?进来看看!
  3. js调用python脚本_javascript – 如何从NodeJs调用python脚本
  4. 相机自动对焦 OpenCV 图像清晰度评价
  5. 白话Elasticsearch28-IK中文分词之IK中文分词器的安装和使用
  6. [html] HTML与XHTML二者有不同
  7. 颜宁:给实验室博士的一些忠告
  8. SpringBoot 使用注解实现消息广播功能
  9. 精确光源(Punctual Light Sources)
  10. JMeter接口测试入门
  11. 使用Photoshop分解gif
  12. 解决win7英文版下中文显示乱码问题
  13. 不同超声诊断仪器的原理和FPGA在超声中应用
  14. 数据链路层的成帧方法
  15. 在docker容器中操作es,并给es7.6添加用户鉴权设置密码
  16. 威学一百_威学一百安卓版下载-威学一百app下载v1.0.0-聚侠网
  17. win10删除鼠标右键选项
  18. ON_NOTIFY处理消息
  19. java 判断字符串是否相等
  20. EC-PCA: 利润中心主数据维护流程

热门文章

  1. Nginx反向代理的目录访问问题
  2. 语音分享应用ios源码项目
  3. 【闲聊产品】之一:半路出家的产品经理
  4. c++ 指针(不断更新)
  5. Microsoft SQL Server Integration Service文章总结
  6. jmultiselect2side.php改为asp,jquery.multiselect2side使用以及文件下载
  7. 《算法图解》之狄克斯特拉算法
  8. C++简介(3)--引用和指针
  9. (四)洞悉linux下的Netfilteriptables:包过滤子系统iptable_filter
  10. linux内存管理初始化