今天了解一下JAVA元数据的用法和一些作用,拿出一些例子,给自己看,怕自己以后忘了
JAVA的元数据功能是JDK1.5才开始支持的,以前都没有,正因为是新支持的,所以有关于它的介绍挺少,用处也不太多,最近发现很多框架都可以把它用来配置一些东西,以代替以前比较复杂的XML配置.想像一下,在JAVA代码中直接写入注释来配置,那该是多么好的事情,让我们写习惯了代码和看习惯了代码的人来说,这无疑是一件很爽的事情.
我们可以使用JAVA内置的注释内型,如果觉得不够用,可以定义自己的注释内型,定义如下
/*
* MyType.java
*
* Created on 2006年12月7日, 下午3:40
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package testAnno;
/**
*
* @author lbf
*/
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface MyType {
String authorName();
String lastModified();
String bugFixes() default "ok";
}
这里我定义了一个我自己的注释类,声明方式和声明接口差不多,只不过在interface前面多了一个@符号.
注释类也可以用注释类注释,如此下去.
@Retention(RetentionPolicy.RUNTIME)
这句表示它的保存范围是到RUNTIME,也就是运行时,这样在类运行的时候,我们也可以取到有关它的信息.
@Target({ElementType.TYPE,ElementType.METHOD})
这句表示它的适用对象,它可以用在哪里地方,我这里定义的是它可以用在类的定义和方法的定义上
然后我们看我们是怎么为我们写的类加上注释的
/*
* Test1.java
*
* Created on 2006年12月7日, 下午3:34
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package testAnno;
/**
*
* @author lbf
*/
import java.lang.annotation.*;
@MyType(authorName="hadeslee",lastModified="20061207")
public class Test1 {
/** Creates a new instance of Test1 */
public Test1() {
}
@Deprecated
@MyType(authorName="hadeslee",lastModified="20061207",bugFixes="what")
public void doSth(){
}
@MyType(authorName="hadeslee",lastModified="20061207",bugFixes="what")
public void doAnother(){
}
}
加了元数据的类和不加元数据的类差不多,只不过如果你的元数据注释如果是运行时的话,你的类文件可能会比不加元数据大一些,因为它必须把一些注释的信息写入到class文件中去,我们已经注释了我们的类,现在我们来看一下,我们如何去取我们的注释,
/*
* GetAnno.java
*
* Created on 2006年12月7日, 下午3:46
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package testAnno;
/**
*
* @author lbf
*/
import java.lang.annotation.*;
import java.lang.reflect.*;
public class GetAnno {
/** Creates a new instance of GetAnno */
public GetAnno() {
}
public static void main(String[] args)throws Exception {
Test1 t=new Test1();
Class c=Test1.class ;
Annotation[] as= c.getDeclaredAnnotations();
for(Annotation an:as){
System.out.println("类Test1的注释"+an);
}
Method med=c.getDeclaredMethod("doSth");
Annotation[] ass=med.getDeclaredAnnotations();
for(Annotation an:ass){
Class<!--/sp-->extends Annotation> clazz=an.annotationType();
Annotation[] ased=clazz.getAnnotations();
for(Annotation ad:ased){
System.out.println("注释的注释:"+ad);
}
System.out.println("方法doSth的注释:"+an);
}
}
}
此程序输出如下
类Test1的注释@testAnno.MyType(bugFixes=ok, authorName=hadeslee, lastModified=20061207)
注释的注释:@java.lang.annotation.Documented()
注释的注释:@java.lang.annotation.Retention(value=RUNTIME)
方法doSth的注释:@java.lang.Deprecated()
注释的注释:@java.lang.annotation.Retention(value=RUNTIME)
注释的注释:@java.lang.annotation.Target(value=[TYPE, METHOD])
方法doSth的注释:@testAnno.MyType(bugFixes=what, authorName=hadeslee, lastModified=20061207)
简单的写了一点点关元数据的东西,希望对自己或者对别人有一点点帮助.
从这代码里,我们可以看出,取注释其实很简单,就是利用反射机制来取的.不过我们要特别注意到的一点是,我们不但可以取我们定义的类的注释,也可以取注释的注释,我们这里只取到了MyType的注释,其实还可以往下取,在取的过程中,我们可以看到这些元数据注释类都用了哪些注释:)
分享到:
相关推荐
这是本人自己开发的一款java代码注释统计工具,支持统计总行数,总代码行数,总注释行数,注释率,注释合格率自定义,统计详细,单个文件统计情况,可导出统计报告等! 注:本软件未捆绑jre(java环境),需要在已...
有关于java的注释规范的详细描述,单行注释、多行注释、分块注释等这些java的三种注释方式
Java代码注释率检查器
eclipse中java类注释模板,有需要的朋友可以参考使用。
Java注释的良好习惯,方便项目的交接和事后的维护与整理,是一个很好的帮助自己养成编码习惯的工具,效果图在我的博文有记录,有需要的伙伴可以自行下载哦~
JAVA扫雷,注释详细
课程设计 java记事本 java代码+注释
能良好的解决使用jd-gui.exe软件反编译程序后,在生成的java文件前部存在的注释: 1.仅支持删除java文件和txt文件;(如果想支持其他格式的文件,请用"."+格式后缀名替换clear_annot类的103行".txt"); 2.仅支持删除...
Java代码、注释模版格式文件
java 注释模板 java 注释模板 java 注释模板 java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板
使用python脚本快速删除java文件中的注释
java文件头注释格式[文].pdf
定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失
在你建立的一个新的Java类时, 当类中有好多注释时你可以见其导入到Eclipse里,每次建类的时候就不用注释了。有JAVA类和方法的注释,很全面,还可以根据你自己的需要进行修改注释
java编码注释 apidoc自动生成 myeclipse的模板写法
java编码规范及注释快捷键.doc
19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java基础概念_注释.zip19.java...
该工具是用于清除C/C++/Java中的// 或/**/的注释。可以对文件夹操作。处理速度非常快。
我们利用jd-gui反编译.classs代码之后,导出来的java源代码里面含有/**,其实这些标记是之前的java源码的注释,我们如何去掉这些标识了?需要利用jd-gui-cleaner.jar工具进行去掉,有需要的可以进行下载使用。 jd-...
java代码注释模板+格式化工具,完全好用,使用。