关于AOP的几个问题
什么是AOP?
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
为什么使用AOP?
将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。我们把这种行为称为"分散关注" AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中。
AOP的本质可以理解为"动态代理模式",想想代理模式的作用就更容易理解AOP了,可以把前面写的一篇动态代理封装事务的文章作为例子
AOP开发过程?
1、分离关注点:分解需求提取出横切关注点和一般关注点。就一般的系统而言,比较常见的关注点为:日志关注点,权限关注点,事务关注点。
2、实现关注点:各自独立地实现关注点,例如日志模块,权限模块。
3、组合关注点:即确定在什么时候执行关注点,例如在每个操作的开始需要开启事务,每个操作结束关闭事务。
我们再来看一下AOP的原理图帮助我们理解AOP的开发过程
Cross Cutting Concern:横切性关注点,是一种独立服务,它会遍布在系统的处理流程之中
Aspect:对横切性关注点的模块化
Advice:对横切性关注点的具体实现
Pointcut:它定义了Advice应用到哪些JoinPoint上,对Spring来说是方法调用
JoinPoint:Advice在应用程序上执行的点或时机,如:Spring只支持方法的JoinPoint,Aspecj可以支持属性的JoinPoint
Weave:将Advice应用到Target Object上的过程叫织入,如Spring支持的是JDK动态代理
Target Object:Advice被应用的对象
Proxy:AOP织入方式之一,如Spring AOP默认使用JDK的动态代理,它的代理是运行时创建;也可以使用CGLIB代理,它的织入方式字节码动态生成;还有Aspecj织入方式:语言扩展
AOP的适用范围?
很明显,AOP非常适合开发J2EE容器服务器,如Jboss4.0
具体功能如下:
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence 持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务