若天明 发表于 2015-1-18 11:48:19

JAVA网页设计JDK5.0中正文(Annotation)的用法

因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。
良多API都必要相称数目的榜样代码,好比,为了编写一个JAX-RPC的WEB服务,你必要供应一个接口和一个完成类。假如这个程序已被加了正文Annotations以申明谁人办法必要被远程挪用,那末我们能够一个工具往主动天生这些榜样代码。



另有一些API必要在程序代码别的保护一些文件,好比JavaBean必要一个BeanInfo类,EJB必要一个部署形貌文件。假如我们可以把这些必要别的保护的文件内容以正文Annotation的体例和代码放在一同保护,必定会加倍便利同时也削减堕落的时机。



Java平台已有了一些出格的正文的机制。好比transient润色符就是一个出格的正文,标明这个字段应当被序列化子体系疏忽;@deprecatedjavadoc标签是一个出格的标签来讲明某个办法已不再被利用了。JDK5.0供应了一个让我们本人界说我们本人正文的功效,这个功效包括了怎样界说正文范例的语法,声明正文的语法,读取正文的API,一个类文件保留正文(译者注:正文能够被看做一个类,我们必要用一个.java文件保留我们本人界说的正文源码)和一个正文处置的工具。



正文其实不影响代码的语义,但却影响用于处置包括有正文的程序代码的工具的处置体例,使他们(工具)可以影响运转形态的程序的语义。正文能够从源代码中读取,从编译后的.class文件中读取,也能够经由过程反射机制在运转时读取。



正文是JavaDoc标签的增补。一样平常情形下,假如我们的次要方针是影响大概发生文档,那末我们应当利用JavaDoc;不然,我们应当利用正文Annotations。



一样平常的使用程序开辟职员大概从不必要界说一个正文范例,但界说我们本人的正文范例其实不庞大。正文范例的界说跟界说一个接口类似,我们必要在interface这个关头字后面加上一个@标记。正文中的每个办法界说了这个正文范例的一个元素,正文中办法的声明中必定不克不及包括参数,也不克不及抛出非常;办法的前往值被限定为复杂范例、String、Class、emnus、正文,和这些范例的数组。办法能够有一个缺省值。这里是一个正文范例界说的例子:

/***DescribestheRequest-For-Enhancement(RFE)thatled*tothepresenceoftheannotatedAPIelement.*/public@interfaceRequestForEnhancement{intid();Stringsynopsis();Stringengineer()default"";Stringdate();default"";}



一旦界说好了一个正文范例,你就能够用来作正文声明。正文一中特别的润色符,在其他润色符(好比public,static,大概final等)利用中央都可使用。依照常规,正文应当放在其他润色符的后面。正文的声明用@标记前面跟上这个正文范例的名字,再前面跟上括号,括号中列出这个正文中元素/办法的key-value对。值必需是常量。这里是一个例子,利用下面界说的正文范例:




@RequestForEnhancement(



id=2868724,



synopsis="Enabletime-travel",



engineer="Mr.Peabody",



date="4/1/3007"



)



publicstaticvoidtravelThroughTime(Datedestination){...}








没有元素/办法的正文被成为标志(marker)正文范例,比方








/**



*IndicatesthatthespecificationoftheannotatedAPIelement



*ispreliminaryandsubjecttochange.



*/



public@interfacePreliminary{}








标志正文在利用的时分,厥后面的括号能够省略,比方:








@PreliminarypublicclassTimeTravel{...}








假如正文中仅包括一个元素,这个元素的名字应当为value,比方:








/**

*AssociatesacopyrightnoticewiththeannotatedAPIelement.

*/

public@interfaceCopyright{Stringvalue();}






假如元素的名字为value,利用这个正文的时分,元素的名字和等号能够省略,如:








@Copyright("2002YoyodynePropulsionSystems")

publicclassOscillationOverthruster{...}






为了将下面提到的工具分离在一同,我们创立了一个复杂的基于正文的测试框架。起首我们必要一个标志正文范例用以申明一个办法是一个测试办法,并被测试工具实行。








importjava.lang.annotation.*;







/**



*Indicatesthattheannotatedmethodisatestmethod.



*Thisannotationshouldbeusedonlyonparameterlessstaticmethods.



*/



@Retention(RetentionPolicy.RUNTIME)



@Target(ElementType.METHOD)



public@interfaceTest{}








我们能够注重到这个正文范例本省也被正文了,这类正文叫做元正文。第一正文(@Retention(RetentionPolicy.RUNTIME))暗示这类范例的正文被VM保存从而使其可以经由过程反射在运转时读取;第二个正文@Target(ElementType.METHOD)暗示这类正文只能用来正文办法。







上面是一个复杂的类,个中的几个办法被加了下面的正文:








publicclassFoo{



@Testpublicstaticvoidm1(){}



publicstaticvoidm2(){}



@Testpublicstaticvoidm3(){



thrownewRuntimeException("Boom");



}



publicstaticvoidm4(){}



@Testpublicstaticvoidm5(){}



publicstaticvoidm6(){}



@Testpublicstaticvoidm7(){



thrownewRuntimeException("Crash");



}



publicstaticvoidm8(){}



}








这里是测试工具:








importjava.lang.reflect.*;







publicclassRunTests{



publicstaticvoidmain(String[]args)throwsException{



intpassed=0,failed=0;



for(Methodm:Class.forName(args).getMethods()){



if(m.isAnnotationPresent(Test.class)){



try{



m.invoke(null);



passed++;



}catch(Throwableex){



System.out.printf("Test%sfailed:%s%n",m,ex.getCause());



failed++;



}



}



}



System.out.printf("Passed:%d,Failed%d%n",passed,failed);



}



}








这个工具用一个类名作为参数,遍历这个类中的一切办法,并挪用个中被加了@Test正文的办法。假如一个办法抛出了一个非常,那末这个测试就失利了,终极的测试了局被打印了出来。上面是程序运转的了局:








$javaRunTestsFoo



TestpublicstaticvoidFoo.m3()failed:java.lang.RuntimeException:Boom



TestpublicstaticvoidFoo.m7()failed:java.lang.RuntimeException:Crash



Passed:2,Failed2












固然这个测试工具只是一个玩具,但他显现了正文的壮大的功效。



Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。

第二个灵魂 发表于 2015-1-21 15:16:24

是一种使网页(Web Page)产生生动活泼画面的语言

admin 发表于 2015-1-28 06:04:56

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

兰色精灵 发表于 2015-2-5 12:18:44

关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。

不帅 发表于 2015-2-11 19:49:21

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

愤怒的大鸟 发表于 2015-3-2 17:23:09

Java是一种计算机编程语言,拥有跨平台、面向对java

小妖女 发表于 2015-3-10 12:59:49

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

爱飞 发表于 2015-3-20 13:52:00

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

飘飘悠悠 发表于 2015-3-31 06:08:12

自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。

冷月葬花魂 发表于 2015-3-31 22:29:30

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

简单生活 发表于 2015-4-2 09:04:00

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

变相怪杰 发表于 2015-4-4 19:48:19

应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展

仓酷云 发表于 2015-4-6 10:27:13

让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。

乐观 发表于 2015-4-8 07:40:58

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

老尸 发表于 2015-4-10 22:22:19

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

谁可相欹 发表于 2015-4-12 05:47:44

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

莫相离 发表于 2015-4-20 19:06:52

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

分手快乐 发表于 2015-5-1 01:10:47

一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。

再见西城 发表于 2015-5-12 07:39:44

是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言

若天明 发表于 2015-6-16 01:39:25

有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
页: [1]
查看完整版本: JAVA网页设计JDK5.0中正文(Annotation)的用法