`

java元数据(metadata)

    博客分类:
  • JVM
 
阅读更多

什么是元数据?

  元数据是指用来描述数据的数据,更通俗一点,就是描述代码间关系,或者代码与其他资源(例如数据库表)之间内在联系的数据。在一些技术框架,如struts、EJB、hibernate就不知不觉用到了元数据。对struts来说,元数据指的是struts-config.xml;对EJB来说,就是ejb-jar.xml和厂商自定义的xml文件;对hibernate来说就是hbm文件。以上阐述的几种元数据都是基于xml文件的或者其他形式的单独配置文件。这样表示有些不便之处。一、与被描述的文件分离,不利于一致性的维护;第二、所有这样文件都是ASCII文件,没有显式的类型支持。基于元数据的广泛应用,JDK5.0引入了Annotation的概念来描述元数据。在java中,元数据以标签的形式存在于java代码中,元数据标签的存在并不影响程序代码的编译和执行。

如何创建元数据?

  JDK5.0出来后,java语言中就有了四种类型(TYPE),即类(class)、枚举(enum)、接口(interface)和注解(@interface),它们是处在同一级别的。java就是通过注解来表示元数据的。

      一个简单的注解定义:

复制代码
public @interface MyAnnotation {
    // 定义公共的final静态属性
    int age = 25;

    // 定义公共的抽象方法
    String name();
}
复制代码

  反编译字节码文件得到:

     

     由上我们可以得到,java的注解本质上是一个接口,而且是继承了接口Annotation的接口。既然是接口,那么

     a.注解可以有成员 
    注解和接口相似,它只能定义final静态属性和公共抽象方法。
     b.注解的方法 
    1.方法前默认会加上public abstract且只能由这两个修饰符修饰。属性前默认加上public static final 且只能由这些修饰符修饰。由于是final,定义时必须初始化。

    2.在声明方法时可以定义方法的默认返回值。 
    例如: 
      String color() default "blue"; 
      String[] color() default {"blue","red",......}
    3.方法的返回值可以有哪些类型 
      8种基本类型,String、Class、枚举、注解及这些类型的数组。

    4.java.lang.annotation.Annotation 本身是接口,而不是注解,当使用关键字@interface 定义一个注解时,该注解隐含的继承了java.lang.annotation.Annotation接口;如果我们定义一个接口,并且让该接口继承自Annotation,那么我们定义的接口依然是接口而不是注解。综上,定义注解只能依靠@interface实现。

JDK提供的几个基本注解

  a. @SuppressWarnings 
      该注解的作用是阻止编译器发出某些警告信息。
    它可以有以下参数: 
      deprecation :过时的类或方法警告。 
      unchecked:执行了未检查的转换时警告。 
      fallthrough:当Switch程序块直接通往下一种情况而没有Break时的警告。
      path:在类路径、源文件路径等中有不存在的路径时的警告。
      serial:当在可序列化的类上缺少serialVersionUID定义时的警告。
      finally:任何finally子句不能完成时的警告。
      all:关于以上所有情况的警告。
   b.@Deprecated
    该注解的作用是标记某个过时的类或方法。
   c. @Override 
    该注解用在方法前面,用来标识该方法是重写父类的某个方法。

元注解(注解的注解)

  a. @Retention 
   它是被定义在一个注解类的前面,用来说明该注解的生命周期。
   它有以下参数: 
      RetentionPolicy.SOURCE:指定注解只保留在源文件当中。
      RetentionPolicy.CLASS:指定注解只保留在class文件中。(缺省)
      RetentionPolicy.RUNTIME:指定注解可以保留在程序运行期间。
   b. @Target 
   它是被定义在一个注解类的前面,用来说明该注解可以被声明在哪些元素前。(默认可以放在任何元素之前)
   它有以下参数: 
    ElementType.TYPE:说明该注解只能被声明在一个类、接口、枚举前。 
    ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
    ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
    ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。 
    ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
    ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
    ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
    ElementType.PACKAGE:说明该注解只能声明在一个包名前。

  c. @Inherited 表明该注解将会被子类继承。

     需要说明的是,加上该元注解的注解,只有用在类元素上才有效果。这是在JDK总的原话:

    Note that this meta-annotation type has no effect if the annotated
    type is used to annotate anything other than a class. Note also
    that this meta-annotation only causes annotations to be inherited
    from superclasses; annotations on implemented interfaces have no
    effect

    但是在其他元素上的注解,只要你没有覆盖父类中的元素,是会继承过来的。这就是为什么有getDeclaredAnnotations()和getAnnotations()的原因。

   d. @Documented

    表明在生成JavaDoc文档时,该注解也会出现在javaDoc文档中。

注解的生命周期

  一个注解可以有三个生命周期,它默认的生命周期是保留在一个CLASS文件,
   但它也可以由一个@Retetion的元注解指定它的生命周期。
   a.java源文件
      当在一个注解类前定义了一个@Retetion(RetentionPolicy.SOURCE)的注解,那么说明该注解只保留在一个源文件当中,当编译器将源文件编译成class文件时,它不会将源文件中定义的注解保留在class文件中。
   b. class文件中 
    当在一个注解类前定义了一个@Retetion(RetentionPolicy.CLASS)的注解,那么说明该注解只保留在一个class文件当中,当加载class文件到内存时,虚拟机会将注解去掉,从而在程序中不能访问。
   c. 程序运行期间 
    当在一个注解类前定义了一个@Retetion(RetentionPolicy.RUNTIME)的注解,那么说明该注解在程序运行期间都会存在内存当中。此时,我们可以通过反射来获得定义在某个类上的所有注解。

分享到:
评论

相关推荐

    java读取metadata元信息

    在Java编程中,元数据(Metadata)是指关于数据的数据,它提供有关文件、数据库记录、类、方法等的附加信息,但不直接构成这些实体的实际内容。元数据可以帮助理解和处理这些对象,例如,图片的元数据可能包含拍摄...

    JMI规范API,java元数据

    Java元数据(Metadata)是关于程序数据的信息,它描述了代码的结构、行为以及与其它组件的关联。元数据在Java中主要用于提供编译器、解释器、开发工具和服务之间的额外信息,帮助这些工具更好地理解和操作代码。JMI...

    metadata公共元数据项目源码

    《metadata公共元数据项目源码解析》 在IT领域,数据是驱动业务发展的核心要素,而元数据(Metadata)则是理解和管理数据的关键。本篇文章将深入探讨“metadata公共元数据项目”的源码,帮助读者理解元数据的重要性...

    mediautil+metadata-extractor

    这个工具包含两个核心组件:`meduautil-1.0.jar`和`metadata-extractor-2.3.1.jar`,它们都是Java编写的库文件,可以方便地集成到各种Java应用程序中来读取和解析多媒体文件的元数据。 首先,我们来看`metadata-...

    Java runtime metadata analysis.zip

    在Java编程语言中,运行时元数据(Runtime Metadata)扮演着至关重要的角色,它提供了关于程序结构、类、方法和变量等信息。元数据在Java虚拟机(JVM)内部被用于解释和执行代码,优化性能,以及实现诸如垃圾收集等...

    关于Java 如何采用 metadata-extractor 读取数码相机 Exif 数据信息的代码.pdf

    metadata-extractor是一个开源的Java库,它能从各种图像和视频文件中提取元数据,包括Exif、IPTC、XMP等信息。这个库非常实用,可以帮助开发者获取到图像文件中的拍摄日期、地理位置、相机型号、曝光时间等丰富的...

    java与元数据[借鉴].pdf

    例如,`java.sql.DatabaseMetaData`接口提供了访问数据库元数据的方法,如`getTables()`、`getColumns()`等,帮助开发者了解数据库的详细情况。 元数据的优势在于它提供了自描述的能力,使得程序集和模块无需额外的...

    java获取数据库主外键

    在Java开发中,有时我们需要动态地获取数据库的元数据信息,比如表结构、主键、外键等。本文将详细介绍如何使用Eclipse和JDBC API来获取MySQL数据库中的表结构以及主外键信息。 #### 一、准备工作 在开始之前,请...

    JAVA100例之实例56 数据库元数据

    在Java编程中,数据库元数据(Metadata)是关于数据库本身信息的数据,如表名、列名、索引、约束等。这些信息可以帮助我们更好地理解和操作数据库。本实例56将深入探讨如何使用Java来获取和利用数据库的元数据。 ...

    DatabaseMetaData生成数据库DLL

    `DatabaseMetaData` 是Java数据库连接(JDBC)API的一部分,它提供了关于数据库模式、特性以及元数据的详细信息。本篇文章将深入探讨如何利用`DatabaseMetaData`生成数据库的DLL(在关系型数据库中,DLL通常指的是...

    基于Java JDBC的数据库元数据查询设计源码

    项目分为核心查询模块“database-metadata-core”和数据展示模块“database-metadata-view”,其中核心模块采用纯JDBC方式,通过java.sql.DatabaseMetaData对象获取数据库元数据信息,不依赖任何外部jar包,适用于...

    metadata-extractor-2.x资源jar包

    总的来说,metadata-extractor-2.x是Java开发中处理图像元数据不可或缺的工具,它简化了复杂的元数据读取和修改过程,为开发者提供了强大的功能。无论是在移动应用、服务器端还是桌面应用中,都可以灵活地集成这个库...

    metadata-extractor-2.8.1.jar java图片信息获取

    《metadata-extractor-2.8.1.jar:Java图片元数据提取详解》 在数字化的世界里,图片不仅仅是视觉上的表达,它们还包含了丰富的元数据,这些数据提供了关于图像的详细信息,如拍摄时间、相机型号、地理位置等。...

    metadata-extractor-2.6.2-API文档-中英对照版.zip

    标签:drewnoakes、metadata、extractor、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明...

    metadata-extractor-2.8.1 jar包以及源码以及使用例子

    "metadata-extractor-2.8.1" 是一个Java库,专门用于从各种图像和音频文件中提取元数据。这个库是由Dave Coffin创建并维护的,它支持大量的文件格式,包括JPEG、TIFF、PNG、PDF等。元数据通常包含关于文件的详细信息...

    metadata-extractor-2.11.0源码及Jar包

    "metadata-extractor-2.11.0源码及Jar包"是一个针对图像和文档元数据提取的Java库,主要用于解析各种文件格式的元数据。这个包包含了两个关键组件:`metadata-extractor-2.11.0.jar`是编译好的二进制库,可以直接在...

    metadata-extractor.jar

    《元数据提取库:metadata-extractor.jar在Java与Android中的应用》 在数字时代,图像文件不仅包含了我们看到的像素信息,还包含了丰富的元数据(Metadata),这些数据提供了关于图片拍摄时间、地点、设备参数等...

    Metadata2Shp.rar 根据卫星元数据(xml格式的)生成shp

    总之,Metadata2Shp.rar 提供了一个便捷的方法,将卫星图像的XML元数据转换成GIS社区普遍接受的Shapefile格式,使得遥感数据能够更好地集成到地理空间分析和制图工作中。通过利用XMLreader的灵活性,这个工具可以...

    metadata-extractor-2.3.1.jar

    metadata-extractor是一个广受欢迎的开源Java库,专门用于从JPEG图片中提取这些元数据。本文将详细介绍这个库的核心功能、使用方法以及其在实际应用中的重要性。 metadata-extractor由David Cochrane开发,它支持...

Global site tag (gtag.js) - Google Analytics