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