一、什么是aop?
aop是面向切面编程。aop是oop的延续,oop的重点在于具体领域模型的抽象,而aop则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。当我们需要为分散的对象引入公共行为(日志、安全、事务)的时候,oop则显得无能为力。也就是说,oop允许你定义从上到下的关系,但并不适合定义从左到右的关系。aop可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。
aop主要功能是日志记录,性能统计,安全控制,事务处理,异常处理等。将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
aop的核心概念:
1、横切关注点
对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点
2、切面(aspect)
类是对物体特征的抽象,切面就是对横切关注点的抽象
3、连接点(joinpoint)
被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器
4、切入点(pointcut)
对连接点进行拦截的定义
5、通知(advice)
所谓通知指的就是指拦截到连接点之后要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类
6、目标对象
代理的目标对象
7、织入(weave)
将切面应用到目标对象并导致代理对象创建的过程
8、引入(introduction)
在不修改代码的前提下,引入可以在运行期为类动态地添加一些方法或字段
二、aop利用什么技术实现的?
aop 实现的关键就在于 aop框架自动创建的 aop代理,aop代理则可分为静态代理和动态代理两大类,其中静态代理是指使用 aop框架提供的命令进行编译,从而在编译阶段就可生成 aop代理类,因此也称为编译时增强;而动态代理则在运行时借助于 JDK 动态代理、CGLIB 等在内存中“临时”生成 aop动态代理类,因此也被称为运行时增强。
aop是怎么出现的?
aop是什么?
aop可以干什么?
aop有什么优势?
自己的理解:
aop是面向切面编程,是对面向对象编程的补充,面向对象可以很好的解决纵向领域的问题,却无法很好解决横向的问题,比如各模块的公共行为的部分;apo利用动态代理的技术,解决了横向公共模块的问题,例如事物控制,日志管理;经典应用是Spring aop。Spring的事物控制就是通过aop实现的。
网友评论