1 aop的适用场景
日志记录,跟踪,优化和监控 事务的处理 持久化 性能的优化 资源池,如数据库连接池的管理 系统统一的认证、权限管理等 应用系统的异常捕捉及处理 针对具体行业应用的横切行为
详见百度百科http://baike.baidu.com/view/73626.htm 很详尽
2 重要概念(参考spring aop http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/aop.html)
Aspect: Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
Joint point:表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
Pointcut:表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
Advice:Advice 定义了在 pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
3 几种aop的java实现
http://www.360doc.com/content/06/0801/09/10266_170258.shtml
http://wayfarer.cnblogs.com/articles/241031.html
动态代理实现aop
http://developer.51cto.com/art/200906/130539.htm
http://www.cn-java.com/www1/?action-viewnews-itemid-3595
4 spring aop
http://www.blogjava.net/DoubleJ/archive/2008/03/04/183796.html
详细的spring aop概念
http://pandonix.iteye.com/blog/336873
http://jamesby.iteye.com/blog/39899
性能较高的动态代理实现cglib。jdk动态代理主要是面向接口代理 而Cglib主要是针对类的代理
cglib采用的是继承委托类的方式,缺点是不能代理final方法。
http://baike.baidu.com/view/1254036.htm
http://blog.sina.com.cn/s/blog_6151984a0100kvkw.html
动态代理是在运行时生成委托类的代理类,而静态代理是在编译时刻就确定了代理类
http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html
5 实践spring aop
http://blog.csdn.net/tanghw/article/details/3862987
http://static.springsource.org/spring/docs/2.5.x/reference/aop.html
同时实验了采用jdk动态代理方式和cglib方式,实现代理对象aop。
比较令人疑惑的是没有发现cglib性能上的优势,执行速度差不多。???解释:
http://hi.baidu.com/haifengjava/blog/item/82649f51331a6c1e367abeee.html
看来大部分情况下还是cglib性能优越