一、基本元注解:    

  @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:

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

    容器注解:

       

    具体注解:

         

     作用于方法:

         

二、注解的属性:

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

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

  

三、注解的综合运用:

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

  注解与反射:

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

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

      

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

      

    2、AnnotatedElement 接口的基本方法:

      isAnnotationPresent(); 判断该元素上是否存在某个类型的注解。 
      getAnnotation()/getDeclaredAnnotation(); 通过注解类型获取注解对象,从而获取注解的属性值。
      getAnnotations()/getDeclaredAnnotations(); 获取注解集合。

   3、代码片段:
 public static void main(String[] arg) throws NoSuchMethodException, NoSuchFieldException, SecurityException{
Class<UserController> 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());
}
}
}

java注解编程@since 1.8的更多相关文章

  1. 初学java注解编程 记录错误及解决办法

    1 :在form表单提交到controller层时 利用hbim的封装的访问数据库 form表单中属性要加上method方法 不然不成功. 2 :在运行eclipse时 有时粘贴个数据或者删除个字段老 ...

  2. java注解编程

  3. Java并发编程中的相关注解

    引自:http://www.cnblogs.com/phoebus0501/archive/2011/02/21/1960077.html Java并发编程中,用到了一些专门为并发编程准备的 Anno ...

  4. JAVA 注解的几大作用及使用方法详解

    JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...

  5. JAVA 注解的几大作用及使用方法详解【转】

    java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...

  6. 框架基础——全面解析Java注解

    为什么学习注解? 学习注解有什么好处? 学完能做什么? 答:1. 能够读懂别人写的代码,特别是框架相关的代码: 2. 让编程更加简洁,代码更加清晰: 3. 让别人高看一眼. spring.mybati ...

  7. Java注解实践

    Java注解实践 标签 : Java基础 注解对代码的语意没有直接影响, 他们只负责提供信息给相关的程序使用. 注解永远不会改变被注解代码的含义, 但可以通过工具对被注解的代码进行特殊处理. JDK ...

  8. Java注解全面解析(转)

    1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...

  9. java注解(基础)

    一.认识注解 1.注解的定义: java提供了一种原程序中的元素关联任何信息和元数据的途径和方法. 2.学习注解的目的: (1)能够读懂别人写的代码,特别是框架相关的代码(框架中使用注解是非常方便的) ...

随机推荐

  1. ASP.NET Core 2.2 : 二十六. 应用JWT进行用户认证及Token的刷新

    来源:https://www.cnblogs.com/FlyLolo/p/ASPNETCore2_26.html 本文将通过实际的例子来演示如何在ASP.NET Core中应用JWT进行用户认证以及T ...

  2. Win10系统下插入耳机前面板无声后面板有声的处理

    问题描述: 当耳机插入后面板绿色口(注意:耳机扬声器为绿色口,红色为话筒麦克风:前后面板一样):可以听到声音,但是转到前面板插入后,无声音:调出声音面板发现声音可随音度波动 处理步骤: 1.保证插牢接 ...

  3. webpack打包过程及开发过程

    1.传统: 1)分模块去定义js.js中要导出将来要被打包的方法module.exports 2)定义main.js入口文件(主文件).在此文件中,导入引用的js文件 var {add} = requ ...

  4. Linux系统Docker启动问题Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service"

    在Liunx中使用Docker, 注: Liunx使用的是在虚拟机下的centOS7版本在刚开始安装Docker时没有任何错误, 但是在后续的docker启动过程中, 出现以下问题: [root@zk ...

  5. 读书笔记三、pandas之重新索引

  6. POJ 2104 区间第k大(主席树)

    题目链接:http://poj.org/problem?id=2104 题目大意:给定还有n个数的序列,m个操作,每个操作含有l,r,k,求区间[l,r]第k大 解题思路:线段树只能维护序列的最大值最 ...

  7. 狼人杀校园升级版:学霸大战学渣 Who is the king of examination!

    之前在微博上看到一个很老的段子 写道 天黑请闭眼.学霸请睁眼,学霸请答题,好的学霸请闭眼:学渣请睁眼,学渣请坐弊,好的学渣请闭眼:监考老师请睁眼,监考老师请确定坐弊考生,监考老师请统一意见,好的监考老 ...

  8. 6.dockerfile

    一.概述 自制镜像的目的不是为了解决配置更新的问题,而是为了定制化应用服务. 镜像的制作:基于容器制作:dockerfile dockerfile的格式:注释信息+指令(约定俗成使用大写)及其参数 d ...

  9. Java+Maven的工程运行Sonar的方式

    step 1:在maven->setting.xml中进行配置 修改mvn工程所用的setting.xml文件,在<profiles></profiles>节点中增加: ...

  10. LeetCode--058--最后一个单词(java)

    给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 说明:一个单词是指由字母组成,但不包含任何空格的字符串. 示例: 输入: &quo ...