Java实现自己的Annotation

本贴最后更新于 3113 天前,其中的信息可能已经东海扬尘

Annotation释义

Annotation:注解,顾名思义就是一个说明解释,在项目中的作用就是取代繁琐的配置文件,直接在代码上标注。

标注可以加在包,类,字段,方法,方法的参数以及局部变量上。

实现方式

Java中提供了四种元注解,专门负责注解其他的注解,分别如下

@Retention元注解,表示需要在什么级别保存该注释信息(生命周期)。可选的RetentionPoicy参数包括:
RetentionPolicy.SOURCE: 停留在java源文件,编译器被丢掉
RetentionPolicy.CLASS:停留在class文件中,但会被VM丢弃(默认)
RetentionPolicy.RUNTIME:内存中的字节码,VM将在运行时也保留注解,因此可以通过反射机制读取注解的信息

@Target元注解,默认值为任何元素,表示该注解用于什么地方。可用的ElementType参数包括
ElementType.CONSTRUCTOR: 构造器声明
ElementType.FIELD: 成员变量、对象、属性(包括enum实例)
ElementType.LOCAL_VARIABLE: 局部变量声明
ElementType.METHOD: 方法声明
ElementType.PACKAGE: 包声明
ElementType.PARAMETER: 参数声明
ElementType.TYPE: 类、接口(包括注解类型)或enum声明

@Documented将注解包含在JavaDoc中

@Inheried允许子类继承父类中的注解

代码示例

/**
 * 注解类型@interface,必须把一个类型定义为@interface,而不能用class或interface关键字。
 * 所有的注解类都隐式继承于java.lang.annotation.Annotation,注解不允许显式继承于其他的接口。
 * @author wanglei
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnnotation {
	//为注解添加属性
      String path();
      String type() default "get"; //为属性提供默认值
      int[] array() default {1, 2, 3}; 
}

/**

  • 注解测试类
  • @author wanglei

*/
public class AnnotationTest {
@MyAnnotation(path="test/add",type="post")
public void test(){

}
//通过反射获得注解属性
public static void main(String[] args) {
	try {
		if(AnnotationTest.class.getMethod("test", null).isAnnotationPresent(MyAnnotation.class)){
			 MyAnnotation annotation=(MyAnnotation)AnnotationTest.class.getMethod("test", null).getAnnotation(MyAnnotation.class);
			 System.out.println(annotation);
			 System.out.println(annotation.path());
			 System.out.println(annotation.type());
		}
	} catch (NoSuchMethodException e) {
		e.printStackTrace();
	} catch (SecurityException e) {
		e.printStackTrace();
	}
}

}

 

  • 注解
    10 引用 • 22 回帖
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3186 引用 • 8212 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • zempty

    貌似注解是不需要实现的?只用 JDK 自带的注上就有相应功能了?

  • someone

    怎么说,我的意思是怎么自定义一个注解[em09],是不是我的表达有问题,求建议