﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-j2ee绿洲-文章分类-jdk1.5新特性</title><link>http://www.blogjava.net/livery/category/31760.html</link><description>找到属于自己的一片天空</description><language>zh-cn</language><lastBuildDate>Tue, 27 May 2008 07:34:23 GMT</lastBuildDate><pubDate>Tue, 27 May 2008 07:34:23 GMT</pubDate><ttl>60</ttl><item><title>1.5中的annotation简介</title><link>http://www.blogjava.net/livery/articles/203096.html</link><dc:creator>心情经纬</dc:creator><author>心情经纬</author><pubDate>Tue, 27 May 2008 00:51:00 GMT</pubDate><guid>http://www.blogjava.net/livery/articles/203096.html</guid><wfw:comment>http://www.blogjava.net/livery/comments/203096.html</wfw:comment><comments>http://www.blogjava.net/livery/articles/203096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/livery/comments/commentRss/203096.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/livery/services/trackbacks/203096.html</trackback:ping><description><![CDATA[1 Target<br />
指定所定义的annotation可以用在哪些程序单元上<br />
如果Target没有指定，则表示该annotation可以使用在任意程序单元上<br />
代码<br />
&nbsp;&nbsp;&nbsp; @Target({ElementType.ANNOTATION_TYPE, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ElementType.CONSTRUCTOR, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ElementType.FIELD, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ElementType.LOCAL_VARIABLE, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ElementType.METHOD, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ElementType.PACKAGE, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ElementType.PARAMETER, <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ElementType.TYPE}) <br />
&nbsp;&nbsp;&nbsp; public @interface TODO {} <br />
<br />
<br />
2&nbsp; Retention<br />
指出Java编译期如何对待annotation<br />
annotation可以被编译期丢掉，或者保留在编译过的class文件中<br />
在annotation被保留时，它也指定是否会在JVM加载class时读取该annotation<br />
代码<br />
&nbsp;&nbsp; @Retention(RetentionPolicy.SOURCE)&nbsp; // Annotation会被编译期丢弃 <br />
&nbsp;&nbsp; public @interface TODO1 {} <br />
&nbsp;&nbsp; @Retention(RetentionPolicy.CLASS)&nbsp;&nbsp; // Annotation保留在class文件中，但会被JVM忽略 <br />
&nbsp;&nbsp; public @interface TODO2 {} <br />
&nbsp;&nbsp; @Retention(RetentionPolicy.RUNTIME) // Annotation保留在class文件中且会被JVM读取 <br />
&nbsp;&nbsp; public @interface TODO3 {} <br />
<br />
<br />
3&nbsp; Documented<br />
指出被定义的annotation被视为所熟悉的程序单元的公开API之一<br />
被@Documented标注的annotation会在javadoc中显示，这在annotation对它标注的元素被客户端使用时有影响时起作用<br />
d, Inherited<br />
该meta-annotation应用于目标为class的annotation类型上，被此annotattion标注的class会自动继承父类的annotation<br />
<br />
4&nbsp; Annotation的反射<br />
我们发现java.lang.Class有许多与Annotation的反射相关的方法，如getAnnotations、isAnnotationpresent<br />
我们可以利用Annotation反射来做许多事情，比如自定义Annotation来做Model对象验证<br />
代码<br />
&nbsp;&nbsp;&nbsp; @Retention(RetentionPolicy.RUNTIME) <br />
&nbsp;&nbsp; @Target({ ElementType.FIELD, ElementType.METHOD }) <br />
&nbsp;&nbsp; public @interface RejectEmpty { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** hint title used in error message */ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String value() default ""; <br />
&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp; &nbsp;<br />
&nbsp;&nbsp;&nbsp; @Retention(RetentionPolicy.RUNTIME) <br />
&nbsp;&nbsp;&nbsp; @Target( { ElementType.FIELD, ElementType.METHOD }) <br />
&nbsp;&nbsp; public @interface AcceptInt { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int min() default Integer.MIN_VALUE; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int max() default Integer.MAX_VALUE; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String hint() default ""; <br />
&nbsp;&nbsp; } <br />
使用@RejectEmpty和@AcceptInt标注我们的Model的field，然后利用反射来做Model验证<br />
<br />
<img src ="http://www.blogjava.net/livery/aggbug/203096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/livery/" target="_blank">心情经纬</a> 2008-05-27 08:51 <a href="http://www.blogjava.net/livery/articles/203096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>