`
lbfhappy
  • 浏览: 83207 次
社区版块
存档分类
最新评论

JAVA元数据注释初探

阅读更多

今天了解一下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的注释,其实还可以往下取,在取的过程中,我们可以看到这些元数据注释类都用了哪些注释:)

分享到:
评论
1 楼 xzzh 2007-10-09  
引用
   Class<!--/</span><span style="color: #000000">sp</span><span style="color: #000000">-->extends Annotation> clazz=an.annotationType();   

这是什么意思?

相关推荐

    Java元数据详解

    "Java元数据详解" Java元数据是指关于数据的数据,用于创建文档、跟踪代码中的依赖性、执行基本编译时检查等。Java5.0(Tiger)中引入了元数据工具,允许开发者使用特殊的标签集合来标记代码,并执行javadoc命令来...

    java的注释规范(单行注释、多行注释、分块注释)

    对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释应放在此域的右方;同一结构中不同域的注释要对齐。 5. 变量、常量的注释应放在其上方相邻位置或右方。 6. 全局变量要有较详细的注释...

    java开发代码注释情况统计工具

    这是本人自己开发的一款java代码注释统计工具,支持统计总行数,总代码行数,总注释行数,注释率,注释合格率自定义,统计详细,单个文件统计情况,可导出统计报告等! 注:本软件未捆绑jre(java环境),需要在已...

    Java注释规范

    Java 注释规范 Java 注释规范是为了让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。该规范定义了 Java 项目中注释的规范和要求,包括注释的类型、注释的内容、注释的位置...

    Java代码注释率检查器.rar

    Java代码注释是编程实践中非常重要的一个环节,它有助于提高代码的可读性和维护性。注释能够解释代码的功能、用途以及实现逻辑,使得其他开发者能更快地理解代码,尤其在团队协作中更是不可或缺。本资源"Java代码...

    Java的注释

    ### Java的注释 在Java开发中,良好的注释习惯对于提高代码的可读性和可维护性至关重要。本文将详细介绍几种常见的Java注释方式及其用途,并通过实例展示如何设置Eclipse IDE中的注释模板,帮助开发者更好地管理和...

    java注释模板

    eclipse中java类注释模板,有需要的朋友可以参考使用。

    java中的注释规范

    5. **源文件注释**:源文件顶部应包含文件的元信息,如文件名、版本号、作者、创建日期和描述。通常使用块注释表示。 ```java /** * 文件名: MyClass.java * 版权声明: ©2022 Your Company * 文件编号: 001 ...

    C/C++/Java 源代码注释清除工具

    标题中的"C/C++/Java 源代码注释清除工具"是一个专门针对这三种编程语言设计的实用程序,它的主要功能是移除源代码文件中的注释。在软件开发过程中,注释对于理解和维护代码至关重要,但在特定情况下,如代码混淆、...

    清除Java代码注释

    当然,对于非程序员或者希望快速操作的用户,也有一些第三方工具可以实现批量清除Java代码注释,例如Java Comment Remover等。这些工具通常具有用户友好的界面,只需选择目标文件或目录,然后点击“清除注释”按钮...

    java代码注释模板

    Java代码注释是编程实践中非常重要的一个环节,它有助于提高代码的可读性和维护性。在团队合作中,良好的代码注释能够帮助其他开发者更快地理解代码的功能和逻辑,节省了阅读和调试的时间。本资源包含一个“java代码...

    Java代码、注释模版格式文件

    在编程领域,代码和注释的模板格式是至关重要的,特别是在Java这种面向对象的语言中。良好的代码风格和规范不仅能够提高代码的可读性,还能提升团队协作的效率,因为所有人都能按照统一的标准来编写代码。"Java代码...

    java反编译去除注释一建去除超级简单

    标题"java反编译去除注释一建去除超级简单"指的是一个简单易用的方法,可以快速地将Java字节码反编译并移除其中的注释。通常,反编译是用于理解二进制代码的行为,或者在没有源代码的情况下进行调试和维护。注释虽然...

    java 方法 类 的 注释模板

    在Java编程中,注释是不可或缺的一部分,它们用于提高代码的可读性和可维护性。一个良好的注释模板可以帮助开发者快速地为类和方法添加描述,使得其他团队成员或者未来的自己能够更容易理解代码的功能和用途。本文将...

    java编码注释和doc自动生成

    在Java编程中,良好的代码注释是至关重要的,它不仅有助于个人理解代码的功能,也有利于团队协作和项目维护。本文将详细介绍如何在Java编码中创建注释以及如何使用apidoc工具自动生成文档。 首先,Java提供了多种...

    java经典去注释程序

    这个程序采用了枚举(enum)数据类型,这是Java中一种特殊的数据结构,用来定义常量或表示一组相关的值。在本程序中,枚举可能被用来标识不同类型的注释,从而实现对它们的高效处理。枚举的使用提高了代码的可读性...

    java文件注释清除工具

    能良好的解决使用jd-gui.exe软件反编译程序后,在生成的java文件前部存在的注释: 1.仅支持删除java文件和txt文件;(如果想支持其他格式的文件,请用"."+格式后缀名替换clear_annot类的103行".txt"); 2.仅支持删除...

    使用python脚本删除java文件中的注释

    使用python脚本快速删除java文件中的注释

    java 注释模板

    java 注释模板 java 注释模板 java 注释模板 java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板java 注释模板

    Eclipse Java 注释模板

    Eclipse作为一款强大的Java集成开发环境(IDE),提供了许多便捷的功能,其中之一就是“Eclipse Java 注释模板”。通过配置和使用这些模板,程序员可以快速地为代码添加注释,提高代码的可读性和维护性。下面我们将...

Global site tag (gtag.js) - Google Analytics