《Spring揭秘》——AOP(笔记)

AOP(Aspect-Oriented Programming):

静态AOP:

  • 实现。以AspectJ为代表。AspectJ会使用ajc编译器将各个Aspect以Java字节码的形式编译到系统的各个功能模块中,以达到融合Aspect和Class的目的。
  • 优点。Aspect直接以Java字节码的形式编译到Java类中,Java虚拟机可以像通常一样加载Java类运行(编译完成的Aspect完全符合Java类的规范),不会对整个系统的运行造成任何的性能损失。
  • 缺点。灵活性不够。

动态AOP:

  • 实现。JBoos AOP,Spring AOP以及Nanning等AOP框架。AOP的织入过程在系统运行开始之后进行,而不是预先编译到系统类中,而且织入信息大都采用外部XML文件格式保存,可以在调整织入点以及织入逻辑单元的同时,不必变更系统其他模块,甚至在系统运行的时候,也可以动态更改织入逻辑。
  • 缺点:难免会造成一定的运行时性能损失。

实现机制:

  1。动态代理:

  • 实现。将横切关注点逻辑封装到动态代理的InvocationHandler中,然后在系统运行期间,根据横切关注点需要织入的模块位置,将横切织入到相应的代理类中。
  • 优缺点。所有需要织入横切关注点逻辑的模块都得实现相应的接口,因为动态代理机制只针对接口有效。性能稍逊一些。
  • 应用。Spring AOP的默认模式。Nanning。

  2。动态字节码增强:

  • 实现:只要交给Java虚拟机运行的文件符合Java class规范。不一定需要使用Javac编译器编译而成,也可以使用ASM或者CGLIB等Java工具库。
  • 优点:即使模块没有实现相应的接口,我们依然可以对其进行扩展,而不像动态代理那样受限于接口。
  • 缺点:如果需要扩展的类以及类中实现方法等声明为final的话,则无法对其进行子类化的扩展。

概念:

  • Joinpoint:只要允许,程序执行过程中任何时点都可以作为横切逻辑的织入点
  • Pointcut:Pointcut代表Joinpoint的表述方式。将横切逻辑织入当前系统的过程中,需要参照Pointcut规定的Joinpoint信息,才可以知道应该往系统的哪些Joinpoint上织入横切逻辑。
  • Advice:代表将会织入到Joinpoint的横切逻辑。
  • Aspect:对系统中的横切关注点逻辑进行模块化封装的AOP概念实体。
  • Target Object:目标对象。







参考:

《Spring揭秘》

thomesca(北蔡):http://blog.csdn.net/thomescai (转载请保留) 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值