关于注解Annotation第二篇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于注解Annotation第二篇相关的知识,希望对你有一定的参考价值。

 

举个例子来看一看注解定义类在语法树中用哪些语法节点来表示以及如何组织的。

@Retention(RetentionPolicy.RUNTIME) // 注解会在class中存在,运行时可通过反射获取
@Target(ElementType.METHOD)         // 目标是方法
@Documented   // 文档生成时,该注解将被包含在javadoc中,可去掉
public @interface TestAnnotation {
	public String name() default "helloworld";
}

查看JCClassDecl语法节点(注解类也被当作一个类来表示)的jcModifiers属性,截图如下。

技术分享

jcModifiers中的flags属性值为8705,必写为这样的表示:

(1<<13)|(1<<0)|(1<<9)

查看Flags中关于各个Modifiers指定的常量,可知是public和interface且还有个专门表示annotation的静态常量,如下:

/** Flag that marks attribute interfaces 标记属性接口, added in classfile v49.0.
     *  应该只能修饰注解定义类
     */
    public static final int ANNOTATION   = 1<<13;

然后看一下JCMethodDecl属性,截图如下:

技术分享

使用如上的注解,如下:

public class C {
	
	@TestAnnotation(name = "小明")
	public Integer test(int a, String name, Object c) {
		return 1;
	}	
}

截图如下:

技术分享 

 

以上是关于关于注解Annotation第二篇的主要内容,如果未能解决你的问题,请参考以下文章

Java开发Spring之IOC详解第二篇(注解开发JdbcTemplatem模板Junit整合)

JAVA - Annotation 注解 入门

关于annotation的认识

关于反射与自定义注解的一些使用

java中的注解Annotation

注解_Annotation