• 2003-12-19

    保重身体吧!

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/60314.html

    我们项目之前的负责人月初的时候对我们说,这个月会过得比较充实。借他吉言,这个月真的很充实,甚至累得快直不起腰来了。最近几天身体明显有些不适,这让想起头两天体检的结果,我已经不是100%的健康了。所以,这里要对所有和我一样的程序员兄弟姐妹们说一声,保重身体。身体是革命的本钱,没有本钱,拿什么做买卖啊!

    我所做出的决定就是9:10之后,不再写工作代码。为什么有零头?因为我们这里最后一班出软件园的班车是9:10,虽然我不必坐车出园,但我仍选择了这个时间作为工作代码编写时间。

    这两天听说JFox要做AOP,于是到JFox的AOP论坛上发了个帖子,侃谈一下我的观点,如下:

    1. 看到JFoxAOP的项目设想,突然冒出这样一个疑问,为什么要用AspectJ?

      首先要说的是,我并不想否认AspectJ的优越,AOP之父领导出来的东西并非浪得虚名。直接采用全新的语法,使得AspectJ相对于许多使用Dynamic Proxy完成的AOP有着相对的效率优势。

      Java世界一个重要的游戏规则就是标准,这也是Java社区与MS抗衡所倚赖的一件利器。AspectJ最为缺少的恰恰就是标准。AOP之父在其访谈录中谈到,AOP思想经历了这么多年,也到了该有标准的时候了。当然,基于现在AspectJ的成熟程度,很可能这个新的标准会取其精华,但指望AspectJ完全成为标准,显然不那么现实。

      如果Java真把AOP纳入语言之中,那么AspectJ其地位如何呢?可能就是一种Java方言了吧!不要认为好的东西进入语言/JDK中就那么理所当然,Log4J已经是一个不良的例子了。

      如果AspectJ真的那么好,为什么JBoss会选择另起炉灶呢?有个朋友对我说过,他并不看好AspectJ的静态weaving,我想最主要的原因在于AspectJ对语言的修改吧!这么做不是不好,只是现在还不是很好。

      作为学习AOP思想之用,AspectJ可能会省去了不少麻烦,但以它作为一个项目的开发语言现在来看是否有些冒进呢?

      看到的,想到的,一家之言,大家一起讨论一下吧!

    2. 现在对于AOP的实现方式通常分成静态和动态两种。

      静态的实现方式正如AspectJ所做,实际上是相当于在普通Java的编译器之前加上了一个预处理器,对aspect进行预处理,使得AspectJ的代码变成普通的Java代码,于是AspectJ产生出来的代码就可以在普通的JVM上运行。

      动态的实现方式可以以nanning和spring为代表,它们采用的手法是运行时根据配置信息进行加载,并在其中插入动态代理,这种实现方式最大的问题就是效率。

      JBoss的AOP实际上介于二者之间,修改class loader,于是优缺点也在二者之间。

      我对Jython的了解(这里提到Jython是因为论坛中有人认为扩展语法的手法不错,并以它作为证据)仅限于听说个这个名词,我不清楚Jython现在的流行程度如何,也不清楚向其它语言扩展,其目的何在。所以也无法得出“采用全新的语法就是好的”这样的结论。

      我在论坛中提出这个问题的原因并非批驳AspectJ,而是希望与大家讨论,得出一个让大家都比较满意的结果。
    分享到:

    历史上的今天:

    平台的绑架 2012-12-19
    引用地址: