- 浏览: 120907 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
willse:
嘿嘿,很好很强大! 有意思............
[转]用ReflectionFactory实现不调用构造参数创建对象 -
phoenix_sun:
谢谢,很完正,是我需要的例子,多谢
使用Spring的JdbcTemplate调用Oracle的存储过程 -
fly533:
不错,非常完整!
使用Spring的JdbcTemplate调用Oracle的存储过程 -
lxc914_java:
,不错,很详细。
[转]详解JAVA POI导出EXCEL报表的操作(包括各种格式及样式的实现)
注释是java5中的新特性,谈到注释,先的谈谈Java元数据(metadata)。元数据,就是“关于数据的数据”。Java元数据有3种基本类型,还有3个Java内置注释类型,另外还有4中元注释类型。你可能用过Javadoc的注释自动生成文档。这就是元数据功能的一种。总的来说,元数据可以用来创建文档,跟踪代码的依赖性,执行编译时格式检查,代替已有的配置文件(如Hibernate也提供了注释配置)。
注释有3中基本类型
a.标记注释 –没有变量,只有名称标识。例如 @annotation
b.单一值注释 –在标记注释的基础上提供一段数据。如 @annotation(“javachen”)
c.完整注释 –可以包括多个数据成员,每个数据成员由名称和值构成。@annotation(site=”www.javachen.com”,author=”javachen”)
Java中提供3个内置注释类型
a. Override ,只能用于方法(不能用于类,包声明或者其他构造)
作用:可以保证编译时候Override函数的声明正确性
用法:
@Override
public void fun(){..}
b.Deprecated 同样只能作用与方法
作用:对不应再使用的方法进行注解
用法:@Deprecated public void fun{…}
c.SupressWarnings 可以注释一段代码
作用:关闭特定的警告信息,例如你在使用泛型的时候未指定类型
用法: @SupressWarnings(value={“unchecked”})
Java中还提供了四种元注释,专门负责注释其他的注释
@Target 表示该注释可以用于什么地方。可用的ElementType参数包括:
CONSTRUCTOR : 构造器的声明
FIELD : 域声明(包括enum实例)
LOCAL_VARIABLE : 局部变量声明
METHOD : 方法声明
PACKAGE : 包声明
PARAMETER : 参数声明
TYPE : 类、接口 (包括注解类型) 或enum声明
@Retention 表示需要在什么级别保存该注释信息。可选的RetentionPoicy参数包括:
SOURCE : 注释将被编译器丢掉
CLASS : 注释在class文件中可用,但会被VM丢弃
RUNTIME : VM将在运行时也保留注释,因此可以通过反射机制读取注释的信息。
@Documented 将注释包含在JavaDoc中
@Inheried 允许子类继承父类中的注释。
在Java中定义自己的注释
Java语言支持一种新的类型——注释类型(annotation type),跟普通类差不多,在类中以符号( @ )的形式注释其他 Java 代码,用@interface 申明自定义注释类型。
package com.javachen.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 用户自定义标签,带有成员变量的MyTag */ @Documented //将注释包含在JavaDoc中 @Inherited //允许子类继承父类中的注释。 @Target(value = {ElementType.METHOD,ElementType.CONSTRUCTOR})//标注这个注释使用的范围 @Retention(value = RetentionPolicy.RUNTIME)//要想使用反射得到注释信息,这个注释必须使用 public @interface MyTag { String name() default "javachen";//给自定义注释类的成员加上默认值 int age() default 24; }
注意:在自定义注释中只有一个成员时,方法名应该为value
使用标签最终是为了帮助开发人员提取注释信息,然后根据不同需求做进一步处理,下面我们来看看如何获取注释信息。
package com.javachen.annotation; import java.lang.annotation.Annotation; public class TagTest { @MyTag(name = "MyTag", age = 1) public void test() { } @Override //可以保证编译时候Override函数的声明正确性 public String toString() { return super.toString(); } @Deprecated //对不应再使用的方法进行注解 public String notToUse() { return super.toString(); } public static void main(String[] args) { TagTest tt = new TagTest(); try { Annotation[] annotation = tt.getClass().getMethod("test") .getAnnotations(); for (Annotation tag : annotation) { System.out.println("Tag is:" + tag); System.out.println("tag.name()" + ((MyTag) tag).name()); System.out.println("tag.age()" + ((MyTag) (tag)).age()); } } catch (NoSuchMethodException e) { e.printStackTrace(); } } }
需要注意的一点是,在执行这段代码之前我们还有一点小工作要做,还需要给我们的自定义标签MyTag加上一个说明标签,@ Retention, 表明注释信息将可以在运行时刻通过反射机制得到。如果不加入这个标签,上面的代码将没有任何输出。
如何使用反射读取注释
在以前的JDK版本中,我们可以使用反射得到类的方法、方法的参数以及其它的类成员等信息。那么在J2SE5.0中同样也可以象方法一样得到注释的各种信息。
在使用反射之前必须使用import java.lang.reflect.* 来导入和反射相关的类。
如果要得到某一个类或接口的注释信息,可以使用如下代码:
Annotation annotation = TestAnnotation.class.getAnnotation(MyAnnotation.class);
如果要得到全部的注释信息可使用如下语句:
Annotation[] annotations = TestAnnotation.class.getAnnotations();
或
Annotation[] annotations = TestAnnotation.class.getDeclaredAnnotations();
getDeclaredAnnotations与getAnnotations类似,但它们不同的是getDeclaredAnnotations 得到的是当前成员所有的注释,不包括继承的。而getAnnotations得到的是包括继承的所有注释。
如果要得到其它成员的注释,可先得到这个成员,然后再得到相应的注释。如得到myMethod的注释。
Method method = TestAnnotation.class.getMethod(“myMethod”, null);
Annotation annotation = method.getAnnotation(MyAnnotation.class);
注:要想使用反射得到注释信息,这个注释必须使用
@Retention(value = RetentionPolicy.RUNTIME)进行注释。
发表评论
-
【转】JDBC使用TNS连接多节点Oracle
2015-04-28 09:06 487原创作品,允许转载 ... -
[转]MyEclipse 设置注释模板
2012-06-18 16:35 958设置注释模板的入口: Window->Prefer ... -
[转]java 解惑你知道多少 2
2011-04-21 21:13 71036. 属性只能被隐藏 Java代码 1.class P { ... -
[转]java解惑你知多少 1
2011-04-21 21:12 1111数值表达式1. 奇偶判断不要使用 i % 2 == 1 来 ... -
[转]正则表达式特殊字符的转义
2010-12-12 23:16 741点的转义:. ==> \\u002E美元符号的转义:$ ... -
【转】JAVA深拷贝与浅拷贝
2010-11-18 16:19 730深拷贝与浅拷贝的区别1.浅复制与深复制概念⑴浅复制(浅克隆)被 ... -
HtmlClient支持AJAX
2010-08-30 08:44 891WebClient webClient = new WebCl ... -
[转]HttpClient 学习整理
2010-07-20 14:11 762HttpClient 学习整理 HttpCli ... -
[转]用ReflectionFactory实现不调用构造参数创建对象
2010-07-06 11:45 1061那天在sun的论坛上漂着,不经意发现了一篇帖子,大概意思是想 ... -
[转]收集常用正则表达式
2010-06-16 23:22 696正则表达式用于字符串处理、表单验证等场合,实用高效。现 ... -
使用Spring的JdbcTemplate调用Oracle的存储过程
2010-06-05 21:01 3254Spring的SimpleJdbcTemplate将 ... -
Java获取操作系统信息
2010-06-04 16:34 1061Java代码 import java.util.Proper ... -
[转] Tomcat中JAVA定时器实现
2010-05-24 23:00 1784好多朋友用过Windows的任务计划,也有不少程序迷自己曾写过 ... -
[转]详解JAVA POI导出EXCEL报表的操作(包括各种格式及样式的实现)
2010-05-12 15:08 1992这两天在做项目时,最 ... -
struts2上传下载所用文件类型[扩展名]对应一览表
2010-04-05 14:42 1683<!-- ===================== ... -
解决java.net.SocketException: No buffer space available (maximum connections reach
2010-03-24 10:16 2267严重: Catalina.stop: java.net.Soc ... -
[转]使用JAVA中的动态代理实现数据库连接池
2010-03-22 23:08 672数据库连接池在编写应用服务是经常需要用到的模块,太 ... -
Log4j使用总结[转]
2010-03-07 00:09 662一、介绍 Log4j是Apache的一个开放源代码项目,通过使 ... -
JTree用法及JTree使用经验总结 [转]
2010-03-05 13:03 1186import java.awt.Dimension;impo ... -
JdbcTemplate查询
2010-01-31 23:19 2142使用JdbcTemplate进行查询时,可以使用queryFo ...
相关推荐
java1.5 annotation注释源代码,
java-annotation-processor:JAVA注释处理器
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc.jar; 赠送源代码:jakarta....人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
eclipse配置Java代码注释模板,Window -> Preferences -> Java -> Code Style -> Code Templates,点击import导入注释模板,勾选Automatically add comments for new methods and types,选择Comments和Code中的注释...
赠送jar包:javax.annotation-api-1.2.jar; 赠送原API文档:javax.annotation-api-1.2-javadoc.jar; 赠送源代码:javax.annotation-api...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
在Maven中使用Java注释处理器进行测试 使用mvn clean install测试 输出示例: [loading /modules/java.base/java/lang/annotation/Annotation.class] Round 1: input files: {user.Hello} annotations: ...
java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机...
赠送jar包:jakarta.annotation-api-1.3.5.jar; 赠送原API文档:jakarta.annotation-api-1.3.5-javadoc...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
赠送jar包:javax.annotation-api-1.3.2.jar; 赠送原API文档:javax.annotation-api-1.3.2-javadoc.jar; 赠送源代码:javax.annotation...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
在由注释生成文档(api,class)的操作中,因为单行注释的先天不足,承载的信息有限,所以通常会选用多行注释来承载我们所需要的信息。基于此,本注释解释器也专注于对多行注释的有效信息进行提取。 简单的实现思想 ...
java或Java框架中常用的注解及其作用详解:Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。 Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过...
用注解的方式定义一个Servlet,就不用在web.xml中配置了。Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。 像上面的AnnotationServlet可以描述成@WebServlet(name="Annotation...
该库为GraphQL模式定义提供了基于注释的语法。 如果您想使用使用graphql-java-annotations创建graphql spring引导服务器的工具,则可以查看库。 目录 入门 (Gradle语法) dependencies { compile " io.github....
NULL 博文链接:https://zhaohaiyang.iteye.com/blog/1483811
赠送jar包:geronimo-annotation_1.0_spec-1.1.1.jar; 赠送原API文档:geronimo-annotation_1.0_spec-1.1.1-javadoc.jar; 赠送源代码:geronimo-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,
java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机...
比较全面的阐述如果正确的使用java annotations 协同平常的代码开发。
在本文中,我们将了解如何使用Java 5 注释来简化Hibernate代码,并使持久层的编码过程变得更为轻松。 传统上,Hibernate的配置依赖于外部 XML 文件:数据库映射被定义为一组 XML 映射文件,并且在启动时进行加载。...
赠送jar包:mybatis-plus-annotation-3.2.0.jar; 赠送原API文档:mybatis-plus-annotation-3.2.0-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
java高手真经 全光盘源代码 打包rar 第1部分(2个程序包) HelloWorld.zip 01.Java入门样例HelloWorld demo.zip 03.Eclipse入门样例...javaannotation.zip 28.Java注释符编程 javafeature.zip 29.Java5.0语言新特性