java since注解_java注解编程@since 1.8

一、基本元注解:

@Retention:

说明这个注解的生命周期

RetentionPolicy.SOURCE -> 保留在原码阶段,编译时忽略

RetentionPolicy.CLASS -> 保留在编译阶段,不会被加载到jvm

RetentionPolicy.RUNTIME -> 加载到jvm运行中

@Target:

指明注解运用之处

ElementType.Type -> 作用于类、接口、枚举

ElementType.FIELD -> 属性

ElementType.METHOD -> 方法

ElementType.PARAMETER -> 方法的参数

ElementType.CONSTRUCTOR -> 构造方法

ElementType.LOCAL_VARIABLE -> 局部变量

ElementType.ANNOTATION_TYPE -> 作用于注解

ElementType.PACKAGE -> 作用于包

ElementType.TYPE_PARAMETER

ElementType.TYPE_USE

@Documented:

表示文档

@Inherited:

表示继承,作用在父类时子类可以拥有父类的注解

@Repeatable:

表明标记的注解维护一个容器,并且可以多次应用于相同的属性或声明

容器注解:

6a36faf604bfd4e308d42c8730e98920.png

具体注解:

8e692fef23bcbda20ec1183c4464fb28.png

作用于方法:

cc403b0d970758566f7ff8badef47f61.png

二、注解的属性:

1、注解只有成员变量,没有方法。注解的成员变量在注解的定义中以“无形参的方法”形式来声明,其方法名定义了该成员变量的名字,其返回值定义了该成员变量的类型。

2、属性时它的类型必须是 8 种基本数据类型外加 类、接口、注解及它们的数组。数组属性在使用时可以加{}表示数组,也可以不加表示数组中只有一个元素。

三、注解的综合运用:

注解一般结合反射使用,通过反射模板对象获取注解的类型和属性值。

注解与反射:

1、java1.5在反射包中引入了 java.lang.reflect.AnnotatedElement 接口,该接口主要用于注解类型和属性的处理。

Class、Field、Method类的父类或超类都有实现AnnotatedElement 接口。

4d6779c71bdcd5f0bec2b9b2e214c407.png

该类的子类Field、Method等关于AnnotatedElement 的方法必须被重写

40b7c22e0e0ca81b5b4126e2fd2916df.png

2、AnnotatedElement 接口的基本方法:

isAnnotationPresent(); 判断该元素上是否存在某个类型的注解。

getAnnotation()/getDeclaredAnnotation(); 通过注解类型获取注解对象,从而获取注解的属性值。

getAnnotations()/getDeclaredAnnotations(); 获取注解集合。

3、代码片段:

public static void main(String[] arg) throwsNoSuchMethodException, NoSuchFieldException, SecurityException{

Class userClass = UserController.class;//获取类上的注解//判断该对象是否有该注解

if (userClass.isAnnotationPresent(RequestMapping.class)) {

RequestMapping requestMapping= userClass.getDeclaredAnnotation(RequestMapping.class);

String[] value=requestMapping.value();

System.out.println("UserController类上RequestMapping注解的属性:" +Arrays.toString(value));

}else{

System.out.println("UserController类上没有RequestMapping注解!");

}//获取属性上的注解

Field getField = userClass.getDeclaredField("userService");

SuperBug fSuperBug= getField.getDeclaredAnnotation(SuperBug.class);

String[] fValue=fSuperBug.value();

System.out.println("userService属性上SuperBug注解的值:" +Arrays.toString(fValue));//获取方法上的注解

Method getMethod = userClass.getDeclaredMethod("getUserList1", String.class);

SuperBug mSuperBug= getMethod.getDeclaredAnnotation(SuperBug.class);

String[] mValue=mSuperBug.value();

System.out.println("getUserList1方法上SuperBug注解的值:" +Arrays.toString(mValue));//获取方法上的所有注解反射模板class//getDeclaredAnnotations返回该元素上直接声明的注释(不包括继承)

Annotation[] annotations =getMethod.getDeclaredAnnotations();for(Annotation annotation : annotations) {

Class extends Annotation> aClass =annotation.annotationType();if ("com.superbug.word.annotation.SuperBug".equals(aClass.getTypeName())) {

SuperBug superBug1=(SuperBug) annotation;

System.out.println(superBug1.toString());

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值