站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题J2SE5.0新特性之元数据

J2SE5.0新特性之元数据

摘要: J2SE5.0新特性之元数据

J2SE5.0新特性之元数据<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

晁岳攀 smallnest@163.com

元数据,在java中也叫注释、注解。微软的.net从开始设计时就有这个功能,不过它的术语叫属性。

这时一个强大的功能,程序员如果想挣钱,得好好研究它,因为

在将来的j2ee开发中,广泛的使用它,包括ejb的声明,IOC中的注入等。

IBM网站有篇文章详细介绍了它,挺好的一篇文章。

http://www-900.ibm.com/developerWorks/cn/java/j-annotate1/

http://www-900.ibm.com/developerworks/cn/java/j-annotate2.shtml

我曾兴致勃勃的根据例子在eclipse中测试了一把,可怎么也得不到注释信息。后来,在命令行直接编译java文件,运行才正常。虽然现在的eclipse 编辑器可以识别java的注释语法,但是在编译的时候并没有生成带注释的java类。我没有仔细深究,可能时eclipse在编译的时候枚加上-target 5参数吧,猜测而已。

新建一个注释类型,这个类型指明了一本名著的作者和他的email。

<table class=MsoTableGrid style="BACKGROUND: #cccccc; BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" cellSpacing=0 cellPadding=0 border=0> <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"> <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" vAlign=top width=568>

package com.kuaff.jdk5;

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public @interface BookAuthor

{

String name();

String email();

}

</td></tr></table>

使用这个注释为我们的方法加上注解:

<table class=MsoTableGrid style="BACKGROUND: #cccccc; BORDER-COLLAPSE: collapse; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt" cellSpacing=0 cellPadding=0 border=0> <tr style="mso-yfti-irow: 0; mso-yfti-firstrow: yes; mso-yfti-lastrow: yes"> <td style="BORDER-RIGHT: #d4d0c8; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #d4d0c8; BACKGROUND-COLOR: transparent" vAlign=top width=568>

package com.kuaff.jdk5;

import java.lang.annotation.Annotation;

public class MetadataShow

{

@BookAuthor(name="曹雪芹",email="caoxueqin@hongloumeng.books")

public void introHongLouMeng()

{

System.out.println("这是一本好书啊");

}

public static void main(String[] args)

{

MetadataShow metadata = new MetadataShow();

try

{

Annotation[] annotation = metadata.getClass().getMethod("introHongLouMeng").getAnnotations();

for(Annotation a : annotation)

{

System.out.printf("作者:%s%n", ((BookAuthor)a).name());

System.out.printf("他的电子邮件(可能已被注销):%s%n", ((BookAuthor)a).email());

}

}

catch (SecurityException e)

{

e.printStackTrace();

}

catch (NoSuchMethodException e)

{

e.printStackTrace();

}

}

}

</td></tr></table>

请注意,要想在程序运行时能读取这些注释,需要在注释的声明的时候加上

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD) //也可能时其他类型,如针对声明的注释

这是对注释的注释。

编译这两个文件:

javac -source 5 -target 5 -d bin src/com/kuaff/jdk5/*.java



↑返回目录
前一篇: J2SE5.0新特性之枚举类型
后一篇: J2SE5.0新特性之范型编程