浏览 6437 次
锁定老帖子 主题:更正对AspectJ的一些误解
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-02-04
事实情况如何呢?当我正倾注大量的热心于AspectWerkz的时候,忽然得知AspectJ和AspectWerkz合并的消息。由于AspectWerkz是通过运行期动态织入字节码的方式实现AOP,能够正确的报告异常,我就疑惑结合后的AspectJ 5如何解决这个问题。经过一番小小的折腾后,搭建起了AspectJ的环境,经过测试,让我大为吃惊的是:AspectJ一样能够非常正确的报告出错行数等相关信息,丝毫没有引起调试的任何困难!参考附件的截图。 可以清楚的看到,经过AspectJ编译后的代码,运行时正确的抛出了异常,并正确的报告了错误行号,堆栈等错误信息。没有出现我预想的情景。 整个过程给我的教训是:不要轻易将道听途说的东西作为技术判断的依据。 有意思的是恰好在几个礼拜前,看到gigix在程序员杂志上发表的“动态代理的前世今生”一文中针对AspectJ提出的两点缺陷:1. 需要预编译,影响开发节奏;2. 静态织入导致调试困难。gigix或许是犯了和我一样的错误:过于信任道听途说的东西。对于1,仅仅是用ajc替换javac,换了一个编译工具而已,就像我们习惯用ant或maven一样,并没有明显的预编译过程。在安装了插件的eclipse环境中更是无缝集成,开发人员感觉不到和平常编译有任何不同。而对于2, 事实已经证明丝毫不会干扰运行和调试。 Eclipse有专门针对AspectJ的工具项目:AJDT。已经比较成熟和稳定。在这个工具的帮助下,可以对AspectJ的语法高亮,语法检查,代码自动完成,甚至可以直接观察到哪些类的哪些方法被Aspect切入了,又或是某个Aspect都切入了哪些类。甚至直接在这些关系间导航...大大降低了开发的难度,这些都是其它AOP实现所无法比拟的。 AspectJ 5将是AspectJ和AspectWerkz结合后正式发布的第一个版本,同时拥有原来AspectJ的强大的静态以及AspectWerkz灵活的动态织入能力,你甚至不用学习原来AspectJ特有的语法,使用纯粹的Java开发AOP应用,再加上AJDT良好的支持,将进一步确立它在AOP方面的王者地位和事实标准。 AspectJ http://www.eclipse.org/aspectj AJDT http://www.eclipse.org/ajdt AJDT 新功能的介绍 http://www.eclipse.org/ajdt/whatsnew120M2 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2005-02-04
哦,程序员上的《动态代理的前世今生》是gigix写的啊?呵呵,写得很好,值得一读,不过也说明自己孤陋寡闻,对不上名,呵呵。
看来,javaeye上做AOP的,有蛮多牛人嘛,楼主,多贴些这样的经验,与大家共享。 |
|
返回顶楼 | |
发表时间:2005-02-04
多谢指正。我的那些观点倒不是道听途说,是来自实践经验。不过我用AspectJ的时候它甚至还没搬到Eclipse.org,显然版本太老还不完善,我是把一个旧观念一直保持至今了。幸亏你的指正来得及时,我还来得及把J2EE without EJB里面的一个注脚修正过来。
|
|
返回顶楼 | |
发表时间:2005-02-04
什么时候能看到啊,等得好着急
|
|
返回顶楼 | |
发表时间:2005-02-04
我非常期待今年三月份AspectJ 5的正式发布,和AspectWerkz结合后的AspectJ将同时拥有静态织入的高效强大和动态织入的灵活。再回头参照一下现在流行的基于DynamicProxy实现的AOP已经没有任何优势可以和AspectJ相比。
|
|
返回顶楼 | |