论坛首页 Java企业应用论坛

侵入,无侵入? Annotation vs Interface

浏览 27479 次
该帖已经被评为良好帖
作者 正文
   发表时间: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所列的这些问题呢? 谢谢
0 请登录后投票
   发表时间:2006-11-09  
Feiing 写道
Allen 写道
Feiing 写道
Annotation, J2EE 衰落的标志?


这个,为什么这样说呢?我入行尚浅,看不太明白……


开玩笑的, 只是我个人看 Annotation 不太舒服


因为C#有了,所以java也得有,你看看java 6.0吧,又学了不少呢。

从C# 2.0 和C# 3.0 preview之后,大概已经没人敢再说,C#象java了。
0 请登录后投票
   发表时间:2006-11-09  
总体说来,学究式的讨论。
0 请登录后投票
   发表时间: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,动态织入都没有问题。
0 请登录后投票
   发表时间:2006-11-09  
谢谢partech,看来我需要对AspejctJ5多一些研究
0 请登录后投票
   发表时间: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/
0 请登录后投票
   发表时间:2006-11-10  
我们只能说,Annotation和配置文件各有各的最适宜的使用环境,就像汽车分为公交车长途车货车等等一样,如果你对annotation不感冒或者是其他的,完全可以不用,相反,有的人也许会觉得比较好.再比如就像Weblogic这样的服务器,有很多高级的功能,很多项目可能都用不到,但BEA必须得提供,因为它是一种面向所有的人产品.
0 请登录后投票
   发表时间:2006-11-28  
劳民伤财啊。。。
0 请登录后投票
   发表时间:2006-11-29  
个人感觉annotation是以后的趋势
0 请登录后投票
   发表时间: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了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics