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

学习小记

阅读更多

今天了解一下JAVA元数据的用法和一些作用,拿出一些例子,给自己看,怕自己以后忘了

JAVA的元数据功能是JDK1.5才开始支持的,以前都没有,正因为是新支持的,所以有关于它的介绍挺少,用处也不太多,最近发现很多框架都可以把它用来配置一些东西,以代替以前比较复杂的XML配置.想像一下,在JAVA代码中直接写入注释来配置,那该是多么好的事情,让我们写习惯了代码和看习惯了代码的人来说,这无疑是一件很爽的事情.

我们可以使用JAVA内置的注释内型,如果觉得不够用,可以定义自己的注释内型,定义如下

java 代码
  1. /*  
  2.  * MyType.java  
  3.  *  
  4.  * Created on 2006年12月7日, 下午3:40  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package testAnno;   
  11.   
  12. /**  
  13.  *  
  14.  * @author lbf  
  15.  */  
  16. import java.lang.annotation.*;   
  17. @Retention(RetentionPolicy.RUNTIME)   
  18. @Target({ElementType.TYPE,ElementType.METHOD})   
  19. public @interface MyType {   
  20.     String authorName();   
  21.     String lastModified();   
  22.     String bugFixes() default "ok";   
  23. }   

这里我定义了一个我自己的注释类,声明方式和声明接口差不多,只不过在interface前面多了一个@符号. 

注释类也可以用注释类注释,如此下去.

@Retention(RetentionPolicy.RUNTIME)

这句表示它的保存范围是到RUNTIME,也就是运行时,这样在类运行的时候,我们也可以取到有关它的信息.

@Target({ElementType.TYPE,ElementType.METHOD})  

这句表示它的适用对象,它可以用在哪里地方,我这里定义的是它可以用在类的定义和方法的定义上

然后我们看我们是怎么为我们写的类加上注释的

java 代码
  1. /*  
  2.  * Test1.java  
  3.  *  
  4.  * Created on 2006年12月7日, 下午3:34  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package testAnno;   
  11.   
  12. /**  
  13.  *  
  14.  * @author lbf  
  15.  */  
  16. import java.lang.annotation.*;   
  17. @MyType(authorName="hadeslee",lastModified="20061207")   
  18. public class Test1 {   
  19.        
  20.     /** Creates a new instance of Test1 */  
  21.     public Test1() {   
  22.     }   
  23.     @Deprecated  
  24.     @MyType(authorName="hadeslee",lastModified="20061207",bugFixes="what")   
  25.     public void doSth(){   
  26.               
  27.     }   
  28.     @MyType(authorName="hadeslee",lastModified="20061207",bugFixes="what")   
  29.     public void doAnother(){   
  30.            
  31.     }   
  32. }   

加了元数据的类和不加元数据的类差不多,只不过如果你的元数据注释如果是运行时的话,你的类文件可能会双不加元数据大一些,因为它必须把一些注释的信息写入到class文件中去,我们已经注释了我们的类,现在我们来看一下,我们如何去取我们的注释,

java 代码
  1. /*  
  2.  * GetAnno.java  
  3.  *  
  4.  * Created on 2006年12月7日, 下午3:46  
  5.  *  
  6.  * To change this template, choose Tools | Template Manager  
  7.  * and open the template in the editor.  
  8.  */  
  9.   
  10. package testAnno;   
  11.   
  12. /**  
  13.  *  
  14.  * @author lbf  
  15.  */  
  16. import java.lang.annotation.*;   
  17. import java.lang.reflect.*;   
  18. public class GetAnno {   
  19.        
  20.     /** Creates a new instance of GetAnno */  
  21.     public GetAnno() {   
  22.     }   
  23.     public static void main(String[] args)throws Exception {   
  24.         Test1 t=new Test1();   
  25.         Class c=Test1.class ;   
  26.         Annotation[] as= c.getDeclaredAnnotations();   
  27.         for(Annotation an:as){   
  28.             System.out.println("类Test1的注释"+an);   
  29.         }   
  30.         Method med=c.getDeclaredMethod("doSth");   
  31.         Annotation[] ass=med.getDeclaredAnnotations();   
  32.         for(Annotation an:ass){   
  33.             Class<!---->extends Annotation> clazz=an.annotationType();   
  34.             Annotation[] ased=clazz.getAnnotations();   
  35.             for(Annotation ad:ased){   
  36.                 System.out.println("注释的注释:"+ad);   
  37.             }   
  38.             System.out.println("方法doSth的注释:"+an);   
  39.         }   
  40.     }   
  41. }   

 此程序输出如下

类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)

 

 

简单的写了一点点关元数据的东西,希望对自己或者对别人有一点点帮助.

 

千里冰封于2006年12月7日下午

从这代码里,我们可以看出,取注释其实很简单,就是利用反射机制来取的.不过我们要特别注意到的一点是,我们不但可以取我们定义的类的注释,也可以取注释的注释,我们这里只取到了MyType的注释,其实还可以往下取,在取的过程中,我们可以看到这些元数据注释类都用了哪些注释:)
分享到:
评论

相关推荐

    GeoStudio学习小记.pdf

    GeoStudio学习小记

    d3js 学习小记

    ### D3.js 学习小记 #### SVG基础与D3.js绘图实践 ##### SVG基础 SVG(可缩放矢量图形)是一种基于XML的矢量图像格式,用于描述二维图形以及图形应用。SVG 图像可以被放大、缩小而不会失真,非常适合于网页制作。...

    104规约规约学习小记

    本章节将重点围绕104规约的学习小记,包括固定长度报文的基本结构、常见帧的类型、报文示例及总召唤命令等几个方面进行详细解析。 #### 二、固定长度报文 固定长度报文是104规约中的一种基本报文形式,其结构相对...

    LocalCache 学习小记1

    【LocalCache 学习小记1】 LocalCache 是一种本地高速缓存机制,它主要用于提升数据获取速度,尤其是在处理大量数据时,可以有效避免频繁访问远程数据库或分布式缓存,如 Redis 中的热键问题。LocalCache 不是...

    VC学习小记

    《VC学习小记》 学习Visual C++,也就是VC,是一项技术性强且深入的工程,尤其对于初学者来说,需要有良好的C/C++基础作为支撑。C++的基础知识包括语法、面向对象编程概念以及模板等高级特性,这些都是使用MFC...

    SQL学习小记

    标题 "SQL学习小记" 暗示了这篇博客文章主要关注的是SQL语言的学习和实践。SQL(Structured Query Language)是用于管理和处理关系数据库的标准编程语言。以下是对这个主题的详细探讨: SQL基础: 1. 数据类型:SQL...

    redis安全学习小记1

    Redis是一款高性能的键值存储系统,常用于缓存和数据库应用。本文主要探讨Redis的安全问题,包括连接方式、数据加密、认证机制、数据备份以及主从复制等方面。 首先,Redis的默认配置可能存在安全风险,例如它允许...

    单元测试学习小记

    单元测试学习小记软件测试什么是单元测试单元在程序里可以简单的理解为一个模块,一个方法。单元测试也就是在完成每个模块后都进行的测试。从确保每个模块没有问题,从而提高整体的程序质量。做单元测试的好处对于...

    百度paddle课程学习小记(上)

    百度paddle课程学习小记(上)百度paddle课程学习小记(上)Day-1:python基础练习Day-2:《青春有你2》选手信息爬取遇到的问题Day-3《青春有你2》选手数据分析遇到的问题未完待续 百度paddle课程学习小记(上) 第...

    js 正则学习小记之匹配字符串字面量优化篇

    昨天在《js 正则学习小记之匹配字符串字面量》谈到 /”(?:\\.|[^”])*”/ 是个不错的表达式,因为可以满足我们的要求,所以这个表达式可用,但不一定是最好的。 从性能上来说,他非常糟糕,为什么这么说呢,因为 ...

    CAPWAP学习小记

    CAPWAP(Control and Provisioning of Wireless Access Points)协议是一种用于无线接入点(AP)与无线控制器(AC)之间通信的标准化协议。该协议的主要目标是解决大规模无线网络部署中的管理和配置难题,使得瘦AP...

    js正则学习小记之匹配字符串字面量

    正则表达式是处理文本和数据非常强大的工具,尤其在编程语言如JavaScript中,正则表达式用于执行字符串搜索、替换、提取...通过本篇小记的学习,可以更好地理解正则表达式的应用,并在JavaScript编程中有效地利用它们。

    android开发小记

    在“android开发小记”这个主题中,我们可以深入探讨Android应用程序开发的相关知识,特别是通过查看提供的压缩文件中的代码示例。这些文件名如lesson_8_code.zip至lesson_20_codel.zip,以及不同的Mp3Player版本,...

    阿里大数据分析平台使用小记

    阿里大数据分析平台使用小记 阿里大数据分析平台是阿里巴巴集团旗下的数据分析平台,提供了大数据处理、存储和分析的能力。该平台主要应用于天池大数据竞赛平台,提供了一些使用经验和教程,但不是完整的开发使用...

    “大二”生活小记.docx

    【大二】生活小记——记录的是1960年代初中国大学生的日常生活与学习经历。这段文字由符磊教授撰写,描绘了当时在南昌航校(现江西工学院)度过的大二时光,反映了那个特殊历史时期同学们面对的艰难生活条件和...

    java小记.rar

    Java Web开发是软件行业中一个广泛讨论的话题,涵盖了诸如Servlet、JSP、JDBC、MVC框架、企业级组件以及各种工具和技术。...通过学习和参考这些笔记,可以提升Java Web开发技能,更好地应对实际项目中的挑战。

Global site tag (gtag.js) - Google Analytics