JAVA教程之John Heintz谈怎样向Java注解增加举动仓酷云
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也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 是一种使网页(Web Page)产生生动活泼画面的语言 是一种突破用户端机器环境和CPU J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 Java 编程语言的风格十分接近C、C++语言。 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢? 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 是一种为 Internet发展的计算机语言 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 是一种将安全性(Security)列为第一优先考虑的语言 是一种使用者不需花费很多时间学习的语言
页:
[1]