仓酷云
标题:
JAVA网页设计JDK5.0中正文(Annotation)的用法
[打印本页]
作者:
若天明
时间:
2015-1-18 11:48
标题:
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"[unassigned]";Stringdate();default"[unimplemented]";}
一旦界说好了一个正文范例,你就能够用来作正文声明。正文一中特别的润色符,在其他润色符(好比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[0]).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
是一种使网页(Web Page)产生生动活泼画面的语言
作者:
admin
时间:
2015-1-28 06:04
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者:
兰色精灵
时间:
2015-2-5 12:18
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
作者:
不帅
时间:
2015-2-11 19:49
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者:
愤怒的大鸟
时间:
2015-3-2 17:23
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
小妖女
时间:
2015-3-10 12:59
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者:
爱飞
时间:
2015-3-20 13:52
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者:
飘飘悠悠
时间:
2015-3-31 06:08
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者:
冷月葬花魂
时间:
2015-3-31 22:29
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者:
简单生活
时间:
2015-4-2 09:04
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者:
变相怪杰
时间:
2015-4-4 19:48
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者:
仓酷云
时间:
2015-4-6 10:27
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者:
乐观
时间:
2015-4-8 07:40
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者:
老尸
时间:
2015-4-10 22:22
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
作者:
谁可相欹
时间:
2015-4-12 05:47
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
作者:
莫相离
时间:
2015-4-20 19:06
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者:
分手快乐
时间:
2015-5-1 01:10
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
作者:
再见西城
时间:
2015-5-12 07:39
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者:
若天明
时间:
2015-6-16 01:39
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2