该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-09
partech 写道 Feiing 写道 Annotation, J2EE 衰落的标志?
基于Aspect的Declare Annotation,才能做到彻底的无侵入。AO复兴的标志? 引用 AspectJ不是正确的道路- - 小陶:AspectJ是正确的道路 http://www.blogdriver.com/showBlog.do?bloggerID=21367&diaryID=159117 加入不加入语言支持,这不是关键。关键是,是否方便调试,是否方便TDD(当然,首先必须满足必要的功能,否则就不用说了)。照这个标准,AspectJ是个糟糕的方向。AspectJ增强后的代码,不但debugger跟踪不到,而且异常堆栈的行号都和原来的源代码对不上(那是当然了),调试起来会头大如斗。AspectJ让“编辑-构建-发布”周期变长了,修改源码之后必须先做预编译,才能执行单元测试。 更加糟糕的是,用AspectJ你不能动态决定是否加载aspect。想想吧,小陶,当一个class被预编译增强之后,你又打算不给它加载aspect了,该怎么办?恐怕你必须重新预编译整个系统。那么,如果这个class在某些时候需要aspect、某些时候不需要呢?“是否需要AOP能力”、“需要哪些aspect”应该、必须是在配置文件中声明的,不然你甚至不能独立地测试一个component。所以现在基于动态代理的AOP才是主流。 原文:http://gigix.blogdriver.com/gigix/159329.html 我最近在关注这方面的问题,想对公司现有的平台做些增强.请问partech,怎么解决gigix所列的这些问题呢? 谢谢 |
|
返回顶楼 | |
发表时间:2006-11-09
Feiing 写道 Allen 写道 Feiing 写道 Annotation, J2EE 衰落的标志?
这个,为什么这样说呢?我入行尚浅,看不太明白…… 开玩笑的, 只是我个人看 Annotation 不太舒服 因为C#有了,所以java也得有,你看看java 6.0吧,又学了不少呢。 从C# 2.0 和C# 3.0 preview之后,大概已经没人敢再说,C#象java了。 |
|
返回顶楼 | |
发表时间:2006-11-09
总体说来,学究式的讨论。
|
|
返回顶楼 | |
发表时间:2006-11-09
Morgan0916 写道 引用 AspectJ不是正确的道路- - 小陶:AspectJ是正确的道路 http://www.blogdriver.com/showBlog.do?bloggerID=21367&diaryID=159117 加入不加入语言支持,这不是关键。关键是,是否方便调试,是否方便TDD(当然,首先必须满足必要的功能,否则就不用说了)。照这个标准,AspectJ是个糟糕的方向。AspectJ增强后的代码,不但debugger跟踪不到,而且异常堆栈的行号都和原来的源代码对不上(那是当然了),调试起来会头大如斗。AspectJ让“编辑-构建-发布”周期变长了,修改源码之后必须先做预编译,才能执行单元测试。 更加糟糕的是,用AspectJ你不能动态决定是否加载aspect。想想吧,小陶,当一个class被预编译增强之后,你又打算不给它加载aspect了,该怎么办?恐怕你必须重新预编译整个系统。那么,如果这个class在某些时候需要aspect、某些时候不需要呢?“是否需要AOP能力”、“需要哪些aspect”应该、必须是在配置文件中声明的,不然你甚至不能独立地测试一个component。所以现在基于动态代理的AOP才是主流。 原文:http://gigix.blogdriver.com/gigix/159329.html 我最近在关注这方面的问题,想对公司现有的平台做些增强.请问partech,怎么解决gigix所列的这些问题呢? 谢谢 这些问题在最新版本的AspejctJ5中,已经得到解决。 DEBUG,动态织入都没有问题。 |
|
返回顶楼 | |
发表时间:2006-11-09
谢谢partech,看来我需要对AspejctJ5多一些研究
|
|
返回顶楼 | |
发表时间:2006-11-09
江南白衣 写道 @Undeletable public class Book{ private String status; public void setStatus(String status) { this.status = status; } } @Undeletable(status = "status2") public class BookWithNewStatus { private String status2; public void setStatus2(String status2) { this.status2 = status2; } } 在框架中的判断: if (entityClass.isAnnotationPresent(Undeletable.class)) { Undeletable anno = (Undeletable) entityClass.getAnnotation(Undeletable.class); statusProperty = anno.status(); } 如果基于 Ableverse Meta Facility http://meta.ableverse.org, 还可以这样写: Book.meta <?xml version="1.0" encoding="UTF-8"?> <java> <undeletable status="status2" /> </java> 在框架中的判断: try { MetaBundle meta = MetaBundle.get(entityClass); String statusProperty = meta.getString("undeletable/@status"); // use it } catch (MetaNotFoundException e) { // Not an undeletable } 这样运行期不用像Annotation那样需要重新编译才能修改元数据, 只要改XML就可以了. 而且这个 undeletable/@status 可以在包的级别设置, 下面的类可以继承这个元数据, 这样当一个包下面的大部分Entity类都是 status2 的时候只要写这个包的 .meta 文件包含上面的XML内容, 有个别的是 status3 的话, 写在它自己的 .meta 文件里就可以了. 我刚写完教程, 大家有兴趣可以看看: http://www.ableverse.org/tutorials/meta/ |
|
返回顶楼 | |
发表时间:2006-11-10
我们只能说,Annotation和配置文件各有各的最适宜的使用环境,就像汽车分为公交车长途车货车等等一样,如果你对annotation不感冒或者是其他的,完全可以不用,相反,有的人也许会觉得比较好.再比如就像Weblogic这样的服务器,有很多高级的功能,很多项目可能都用不到,但BEA必须得提供,因为它是一种面向所有的人产品.
|
|
返回顶楼 | |
发表时间:2006-11-28
劳民伤财啊。。。
|
|
返回顶楼 | |
发表时间:2006-11-29
个人感觉annotation是以后的趋势
|
|
返回顶楼 | |
发表时间:2006-11-29
complystill 写道 、
如果基于 Ableverse Meta Facility http://meta.ableverse.org, 还可以这样写: Book.meta <?xml version="1.0" encoding="UTF-8"?> <java> <undeletable status="status2" /> </java> 在框架中的判断: try { MetaBundle meta = MetaBundle.get(entityClass); String statusProperty = meta.getString("undeletable/@status"); // use it } catch (MetaNotFoundException e) { // Not an undeletable } 这样运行期不用像Annotation那样需要重新编译才能修改元数据, 只要改XML就可以了. 而且这个 undeletable/@status 可以在包的级别设置, 下面的类可以继承这个元数据, 这样当一个包下面的大部分Entity类都是 status2 的时候只要写这个包的 .meta 文件包含上面的XML内容, 有个别的是 status3 的话, 写在它自己的 .meta 文件里就可以了. 我刚写完教程, 大家有兴趣可以看看: http://www.ableverse.org/tutorials/meta/ 不错不错,又多一种选择。 XML or Annotation,一直有集中配置(不想散弹式修改)和可动态配置的两难,如果是XML的时候,Java开源社区之前并没有提供一个公共的快速将XML Data影射到Class MetaData的框架,像Spring的Bean Defintion还没达到函数,函数参数,函数返回值级元数据这个要求,自己写一个的话多数人都嫌麻烦不愿干。 现在有猛人share一个出来就最好了。 Book.meta是不是和XFire的aegis一样,要求默认和Book.java放在同一个目录?这样的确最COC了。 |
|
返回顶楼 | |