AOP的简单认识
来源:互联网 发布:在化工厂附近居住 知乎 编辑:程序博客网 时间:2024/05/16 09:45
AOP
AOP(Aspect Orient Programming),也就是面向切面编程,是OOP(面向对象编程)的延续。AOP带来了新的编程革新。 使得软件设计更加细化,代码的编写顺序不再决定其运行顺序,典型框架有Spring和AspectJ框架。理解
面向对象的编程的执行顺序和开发中写入对象之间的调用关系是一致的。面向接口或者加入代理、反射等,都是从纵向上对程序的优化。从时序图里我们可以很明了的了解这种关系,如图:AOP是在不破坏这种业务上的调用关系的情况下,在执行过程的中间添加一段逻辑。这样的逻辑和本身的业务逻辑是相互独立的,例如:日志、安全监测、权限验证等。
原理说明
AOP框架维护者切入点和切入的逻辑的关系。也就是说,具体的每一个切入点对应哪一个切入逻辑是由AOP框架来决定的或者说配置的。如下图:基本概念(spring为例)
连接点(Joinpoint)
表示需要在程序中插入横切关注点的扩展点,连接点可能是类初始化、方法执行、方法调用、字段调用或处理异常等等,在AOP中表示为“在哪里做”。切入点(Pointcut)
选择一组相关连接点的模式,即可以认为连接点的集合,Spring支持perl5正则表达式和AspectJ切入点模式,Spring默认使用AspectJ语法,在AOP中表示为“在哪里做的集合”。增强(Advice)
在连接点上执行的行为,增强提供了在AOP中需要在切入点所选择的连接点处进行扩展现有行为的手段;包括前置增强(before advice)、后置增强 (after advice)、环绕增强 (around advice),在Spring中通过代理模式实现AOP,并通过拦截器模式以环绕连接点的拦截器链织入增强 ;在AOP中表示为“做什么”。方面/切面(Aspect)
横切关注点的模块化,比如上边提到的日志组件。可以认为是增强、引入和切入点的组合;在Spring中可以使用Schema和@AspectJ方式进行组织实现;在AOP中表示为“在哪里做和做什么集合”。目标对象(Target Object)
需要被织入横切关注点的对象,即该对象是切入点选择的对象,需要被增强的对象,从而也可称为“被增强对象”;由于Spring AOP 通过代理模式实现,从而这个对象永远是被代理对象,在AOP中表示为“对谁做”;AOP代理(AOP Proxy)
AOP框架使用代理模式创建的对象,从而实现在连接点处插入增强(即应用切面),就是通过代理来对目标对象应用切面。在Spring中,AOP代理可以用JDK动态代理或CGLIB代理实现,而通过拦截器模型应用切面。织入(Weaving)
织入是一个过程,是将切面应用到目标对象从而创建出AOP代理对象的过程,织入可以在编译期、类装载期、运行期进行。引入(inter-type declaration)
也称为内部类型声明,为已有的类添加额外新的字段或方法,Spring允许引入新的接口(必须对应一个实现)到所有被代理对象(目标对象), 在AOP中表示为“做什么(新增什么)”。AOP的Advice类型
前置增强(Before advice):
在某连接点之前执行的增强,但这个增强不能阻止连接点前的执行(除非它抛出一个异常)。后置返回增强(After returning advice):
在某连接点正常完成后执行的增强:例如,一个方法没有抛出任何异常,正常返回。后置异常增强(After throwing advice):
在方法抛出异常退出时执行的增强。后置最终增强(After (finally) advice):
当某连接点退出的时候执行的增强(不论是正常返回还是异常退出)。环绕增强(Around Advice):
包围一个连接点的增强,如方法调用。这是最强大的一种增强类型。 环绕增强可以在方法调用前后完成自定义的行为。它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。优点:
- 降低模块的耦合度
- 使系统容易扩展
- 设计决定的迟绑定:使用AOP,设计师可以推迟为将来的需求作决定,因为它可以把这种需求作为独立的方面很容易的实现。
- 更好的代码复用性
0 0
- AOP的简单认识
- 简单认识 Spring AOP
- Spring--- AOP的认识
- 对AOP的认识
- 关于AOP的一些认识
- 从头认识Spring-3.1 简单的AOP日志实现-某方法之前的前后记录日志
- 从头认识Spring-3.2 简单的AOP日志实现-需要记录方法的运行时间
- 从头认识Spring-3.2 简单的AOP日志实现-需要记录方法的运行时间
- 从头认识Spring-3.3 简单的AOP日志实现-增加检查订单功能
- 从头认识Spring-3.7 简单的AOP日志实现(注解版)-增加检查订单功能
- AOP的简单应用
- AOP的简单实现
- AOP的简单示例
- AOP 的简单入门
- AOP的简单练习
- AOP的简单练习
- AOP的简单练习
- AOP的简单练习
- Java学习流程分享
- pvr与png的内存占用
- 精准广告系统架构调研
- 安卓逆向学习笔记(5) - 在JNI_Onload 函数处下断点避开针对IDA Pro的反调试
- Android xml资源文件中@、@android:type、@*、?、@+含义和区别
- AOP的简单认识
- poj3436
- Lua开发ios Native App
- 《数字图像处理》——图像退化与压缩编码
- HDOJ 1098 Ignatius's puzzle(数学)
- HDU 3397 Sequence operation
- 装饰者设计模式
- 概念理解(CAP,BASE, ACID)
- 阿J的cocos2d-x学习笔记-元素消消看(四)-可发展的空间及游戏开发中的问题