一、为什么写这个系列的博客

       Aspectj一个易用的、功能强大的aop编程语言。其官网地址是:http://www.eclipse.org/aspectj/,目前最新版本为:1.7.0 RC1。但关于他使用的中文资料少之又少,几乎没有比较完整的中文资料对其做介绍。笔者用Aspectj有段时间了,对其语法还是有些了解。故把自己的经验写出来与大家分享。学习过程主要是从官方网站学习,由于笔者英文水平有限(4级没有过),有理解不到位的地方也请大家多多指正。

二、Aspectj是什么

  官方网站的的介绍是这样的:

  • a seamless aspect-oriented extension to the Javatm programming language(一种基于Java平台的面向切面编程的语言)
  • Java platform compatible(兼容Java平台,可以无缝扩展)
  • easy to learn and use(易学易用)

三、Aspectj能做什么

clean modularization of crosscutting concerns, such as error checking and handling, synchronization, context-sensitive behavior, performance optimizations, monitoring and logging, debugging support, and multi-object protocols。

大意是说:干净的模块化横切关注点(也就是说单纯,基本上无侵入),如错误检查和处理,同步,上下文敏感的行为,性能优化,监控和记录,调试支持,多目标的协议。

四、还有那些常用的Aop,以及他们的区别

  • Jboss Aop:我基本上没有用过,所以没有发言权
  • Spring Aop:Spring自己原生的Aop,只能用一个词来形容:难用。 你需要实现大量的接口,继承大量的类,所以spring aop一度被千夫所指。这于他的无侵入,低耦合完全冲突。不过Spring对开源的优秀框架,组建向来是采用兼容,并入的态度。所以,后来的Spring 就提供了Aspectj支持,也就是我们后来所说的基于纯POJO的Aop。

   区别:Spring Aop采用的动态织入,而Aspectj是静态织入。静态织入:指在编译时期就织入,即:编译出来的class文件,字节码就已经被织入了。动态织入又分静动两种,静则指织入过程只在第一次调用时执行;动则指根据代码动态运行的中间状态来决定如何操作,每次调用Target的时候都执行。有不清楚的同学,可以自己补下基础的代理知识。

五、Aop术语解释

   基本上每篇Aop的文章都必讲的内容,不过笔者所将可能与他们不同,笔者不会照本宣科。

   pointcut: 是一个(组)基于正则表达式的表达式,有点绕,就是说他本身是一个表达式,但是他是基于正则语法的。通常一个pointcut,会选取程序中的某些我们感兴趣的执行点,或者说是程序执行点的集合。

   joinPoint: 通过pointcut选取出来的集合中的具体的一个执行点,我们就叫JoinPoint.

   Advice: 在选取出来的JoinPoint上要执行的操作、逻辑。关于5种类型,我不多说,不懂的同学自己补基础。

   aspect: 就是我们关注点的模块化。这个关注点可能会横切多个对象和模块,事务管理是横切关注点的很好的例子。它是一个抽象的概念,从软件的角度来说是指在应用程序不同模块中的某一个领域或方面。又pointcut 和  advice组成。

   Target:被aspectj横切的对象。我们所说的joinPoint就是Target的某一行,如方法开始执行的地方、方法类调用某个其他方法的代码。

   
    关于aop的术语,我不喜欢翻译成中文,翻译过来找不到一个准确的词,反而误人子弟。再说又为什么一定要翻译成中文勒?笔者刚来深圳的时候,面试的一家公司非要我用中文解释这些名词。最后,就没有然后了~

最新文章

  1. ubuntu 下emacs 配置
  2. sql server pivot/unpivot 行列互转
  3. 解决iis7只能上传30M文件的限制
  4. css3动画在动作结束时保持该状态不变的解决办法
  5. 010医疗项目-模块一:用户添加的实现(Dao,Service,Action,增加页面调试,提交页面调试)
  6. Keil(MDK-ARM)使用教程(二)_菜单
  7. Java多线程-线程的调度(守护线程)
  8. 图像二值化----otsu(最大类间方差法、大津算法)
  9. Servlet的一些细节问题
  10. Palindrome - POJ 3974 (最长回文子串,Manacher模板)
  11. OSG调试信息显示
  12. 常用meta标签整理
  13. 如何定义自己的ViewGroup
  14. WebStorm中Node.js项目配置教程(1)——创建项目
  15. 任务调度之集群(基于Quartz.net)
  16. JS模式--装饰者模式(用AOP动态改变函数的参数)
  17. Learn c for the Second day
  18. java中 Java.lang.Long.parseLong()方法
  19. codeforces 925 c big secret
  20. XAML中格式化日期

热门文章

  1. MVC Html辅助方法DropDownList的简单使用、连接MYSQL数据库用自定义model类接收
  2. ES6学习笔记<三> 生成器函数与yield
  3. ORACLE 归档日志打开关闭方法
  4. jq check 复选变单选。
  5. Linux 实现与宿主机共享文件夹 Centos7
  6. java用Thread方式创建多线程
  7. leetcode1024
  8. [记录] Linux Apache隐藏index.php
  9. beego生成 api 项目 && api 文档
  10. 前后台交互实现点击超链接通过指定的 url 去网络或者文件服务器下载文件