一刀切的AOP基础

软件开发的目的,最终是为了解决各种需求,包括业务和系统的,使用OOP可以对业务需求等普通关注点进行很好的抽象和封装,并且使之模块化。
但OOP却无法解决类似于日志、安全、事务等系统需求的实现在系统中各处散落的问题。

AOP是一种理念,需要一种现实的方式,将实现AOP理念的语言为AOL(Aspect-Oriented Language),可以与业务系统实现语言相同,比如Java,也可以不同,比如AspectJ是扩展自Java的一种AOL

Weave(织入)过程

“飞架”AOP和OOP的桥,在Spring中是一组类来完成,ProxyFactory
囿于现实中AOP技术实现上的尴尬,AOL实现的AOP各个概念实体,最终都需要某种方式集成到系统实现语言所实现的OOP实体组件中。

  • 静态AOP时代
    通过特定的编译器,将实现后的Aspect编译并织入到系统的静态类中。无性能损失但不够灵活
  • 动态AOP时代
    AOP各种概念实体都是普通的Java类,在系统运行开始后才织入,而不是预先编译到系统类中。

AOP 基础概念

  • Jointpoint
    织入操作系统的执行点,基本上,程序执行过程中的执行点都可以作为Joinpoint。

  • Pointcut
    Pointcut概念代表的是Joint的表述方式,使用自然语言声明一个Pointcut,该Pointcut指定了系统中符合条件的一组Joinpoint。
  • Advice
    单一横切关注点逻辑的载体。类比:
    Aspect --> Class
    Advice --> Method
  • Aspect
    对系统中的横切关注点逻辑进行模块化封装的AOP概念实现,通常 包含多个Pointcut和相关Advice定义

  • 概念图

最新文章

  1. IOS开发之小实例--使用UIImagePickerController创建一个简单的相机应用程序
  2. BCE0019: '' is not a member of 'UnityEngine.Component'的问题
  3. 腾讯云CentOS 6.6安装 Nginx
  4. 使用Sharepoint定时运行Excel中宏程序
  5. angularjs2 学习笔记(五) http服务
  6. AWK 介绍
  7. 三十二、Java图形化界面设计——布局管理器之CardLayout(卡片布局)
  8. Win10编译SqlCipher步骤
  9. Dynamics CRM2016 Web API之更新记录
  10. python3字典:获取json响应值来进行断言
  11. ROC曲线的计算
  12. TensorFlow之DNN(二):全连接神经网络的加速技巧(Xavier初始化、Adam、Batch Norm、学习率衰减与梯度截断)
  13. 我的第一个python web开发框架(23)——代码版本控制管理与接口文档
  14. Android Studio 集成开发工具教学视频
  15. Unity3D 在Update中不要过多地修改Transform 信息
  16. 【Thymeleaf】浅谈Java模板引擎(带更新...)
  17. python任意进制转换
  18. 阿里云数据库配置学习笔记(二):下载并配置MySQL数据库
  19. svn : Can not Parse lock / entries hashfile错误解决办法
  20. python【文件操作:读写文件】

热门文章

  1. SQLite基础-8.子句(二)
  2. 【LOJ】#3087. 「GXOI / GZOI2019」旅行者
  3. 2019年十一月(CSP S游记及AFO)
  4. T100——作业单身网格消失,查询时单身无法输入
  5. Linux更改ext4根目录文件系统大小
  6. SSM(Spring+SpringMVC+MyBatis)高并发优化思路
  7. 在react项目当中做导航守卫
  8. C#键盘事件
  9. 虚拟机centos7执行ip addr命令看不到ip地址
  10. linq to xml运用示例