做一个合格的程序猿之浅析Spring AOP源码(十二) AOP概念理解

来源:互联网 发布:如何删掉淘宝评价 编辑:程序博客网 时间:2024/06/05 03:06


 AOP(Aspect-Oriented Programming) 面向切面的编程,在我们平时的开发过程中,AOP其实用的地方总结有:

     ①用来做日记的处理

     ②方法的调用统计

     ③业务层面的读写分离(例如自定义的Annotation+AOP可以实现切换数据源)

     ④自定义权限拦截器

 

在spring框架中,AOP则发挥了不少功效,例如spring的事务,这应该是AOP在spring框架中的最好体现了吧~


有几个问题:

①Spring AOP会提高程序性能吗?

     AOP编程是不会提高程序的性能的,相反,AOP不很大程度上影响程序性能就很不错了,毕竟AOP部分的代码没有单独开一个线程去单独执行,没有影响主进程


②Spring Aop的底层原理?

     java的动态代理或者cglib的动态代理


③spring怎么选择使用java原生的动态代理还是选用cglib的动态代理呢?

     根据到代理的类是否实现了接口,如果有接口默认用原生的动态代理,否则只有选用cglib,关于两者的性能,因为本人没有自己测试过,不敢人云亦云。大家借鉴:

http://www.cnblogs.com/haiq/p/4304615.html


④AOP有规范吗?

AOP是有规范的,叫做AOP联盟,在java方面的实际体现:




最后大家再了解一些AOP的核心概念


 1)Advice(通知)定义你需要在切面做什么事情,即你要告诉AOP你要干什么?(例如切换数据源,做日记等等),通知具体分(前置通知(例如入参的格式验证),后置通知,环绕通知)

 2)Pointcut(切点)定义你在哪里切,即你需要告诉AOP在哪个类中的那个方法中切,因为不是所有的方法都需要走一下AOP的,所以会影响性能


3)Advisor(通知器)有了上述两个概念,你需要将上述的两个概念黏合起来,这就像一瓶胶水,黏合好,就知道在哪个地方需要做什么事情,也就说如果将Advice传给spring理论上就可以动态代理了~



好了,这就是AOP的最基本概念,其实AOP不是很神秘~


   



 

0 0