|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
net网页编程程序员的大部门代码都靠控件拖拽完成的,虽然java也有,但是无论从美观和速度上都没发和.net网页编程比。java程序员都是代码完成的,所以java程序员常戏称.net网页编程程序员是操作员,呵呵。将罕见可重用的举动以定制注解的体例增加到Java使用中是一种十分棒的体例,但假如开辟者在决意利用注解的时分可以遵守一些开辟尺度和最好理论的话,那就更事半功倍了。好比说在企图利用正文之前,对照一下以后情形下是否是正文真的比内迁代码和接口更加贴切。NewAspects的JohnHeintz在比来举办的NoFluffJustStuff(NFJS)俄亥俄州软件中央研究会(COSS)上作了一个演讲,会商了向Java注解增加举动的多种计划手艺。
讲中,John扼要地谈到了字节码和元编程手艺,大致先容了Java使用中的元数据是怎样在初期Java版本中利用属性文件、XML到如今渐渐开展到注解下去的历程。他也提到了制订JSR-175标准的目标在于为Java言语供应元数据工具,好比Java5中就已增加了注解。
界说注解与界说接口的体例类似(利用@Interface范例来声明注解)。注解不但能够用在包级别上,也能够用在类成员(属性、办法、机关办法),乃至还能够用在办法的部分参数上。
坚持战略(retentionpolicy)是完成注解的主要一环,依据数据在内存中坚持工夫的是非,有三品种型的坚持战略:
- Runtime(一向保存数据,能够经由过程反射来会见)
- Class(数据保存在字节码中,没法在运转时会见)
- Source(编译器不保存该数据)
一些盛行框架如EJB3、Hibernate、Spring、Seam、Struts2、RIFE及JAX-WS的新版本都入手下手撑持注解。John叙述了处置注解的三种体例:
天生器:
这类注解处置体例是经由过程读取源代码来发生新的源代码,或修正现存源代码及别的一些文件(XML、文档等等)来完成。天生器次要依附于容器或别的编码商定,能够在任何坚持战略下事情。
利用天生器的例子有注解处置工具(AnnotationProcessingTool,即APT)和处置器、XDoclet、Spoon(针对Java的扩大编译器)、APT-Jelly(一个模板库)等。APT不同意你修正源代码,但对发生帮助文件却有相称年夜的匡助(像WSDL、文档)。
字节码转换:
注解处置器对带有注解的类文件举行剖析,然后对类做一些设当的修正。别的,他们也能天生其他范例的文件(好比XML设置文件)。字节码转换器在离线形态(编译期)、在装载期都能运转,还能在运转时静态运转(利用JVMTIAPI)。在class或runtime如许的坚持战略下,它都能运转。
利用字节码转换器的例子有AspectJ、Spring、Hibernate、CGLib、Javassist、ASM、BCEL等。
运转时反射:
这类体例利用反射API以编程的体例在运转阶段反省对象。它次要依附于容器或其他编码商定,同时也必要runtime坚持战略。
利用运转时反射的例子有:Java5及更新Java版本中的反射、CommonsAttributes。像JUnit和TestNG如许的测试框架也利用运转时反射来处置注解。
John接纳一个Java树模使用向人人展现了怎样分离APT、Javassist、AspectJ及反射(利用了Java静态代办署理)等多种计划手艺来定制注解。他还展现了怎样向类、属性和办法中增加举动,也谈到了怎样利用Aspects来注解范例和办法。
别的,John还提到了AspectProcessing的优点,如简单完成(必要好工具的撑持)、语义仔细——能够影响到办法挪用,乃至是属性的会见(在这点上,和反射和APT分歧),还可以集成多个类库的注解,并撑持特定的范畴笼统。他倡议开辟职员说,假如Java代码能够以接口的体例完成,那就用接口,不要往用注解。他还倡议人人不要对一切工具都利用注解,由于POJO(PlainOldJavaObject)要比HAJO(HeavilyAnnotatedJavaObject)好。在演讲中,他枚举了别的一些最好理论原则,好比:
- 注解要增加在最高条理的笼统上(好比在类和办法这两个条理上,注解要只管增加在类下面)
- 在面临划定规矩的时分,只管利用符合的默许值,并且只对exception增加注解。比外,还要只管罕用参数。
- 将注解作为“规约优于设置”法例的增补(如Spring)
- 利用反射来加强现有框架(如测试)
- 使用Javassist和CGLIB框架来发生新的对象,关于底层来讲,能够进步字节码转换效力
- 利用APT来天生非代码文件
检察英文原文:JohnHeintzonAddingBehaviortoJavaAnnotations
来自:http://www.infoq.com/cn/news/2008/08/nfjs2008-annotations
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,net网页编程beans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。 |
|