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:
表明标记的注解维护一个容器,并且可以多次应用于相同的属性或声明
容器注解:

具体注解:

作用于方法:

二、注解的属性:
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的更多相关文章
- 初学java注解编程 记录错误及解决办法
1 :在form表单提交到controller层时 利用hbim的封装的访问数据库 form表单中属性要加上method方法 不然不成功. 2 :在运行eclipse时 有时粘贴个数据或者删除个字段老 ...
- java注解编程
- Java并发编程中的相关注解
引自:http://www.cnblogs.com/phoebus0501/archive/2011/02/21/1960077.html Java并发编程中,用到了一些专门为并发编程准备的 Anno ...
- JAVA 注解的几大作用及使用方法详解
JAVA 注解的几大作用及使用方法详解 (2013-01-22 15:13:04) 转载▼ 标签: java 注解 杂谈 分类: Java java 注解,从名字上看是注释,解释.但功能却不仅仅是注释 ...
- JAVA 注解的几大作用及使用方法详解【转】
java 注解,从名字上看是注释,解释.但功能却不仅仅是注释那么简单.注解(Annotation) 为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解 ...
- 框架基础——全面解析Java注解
为什么学习注解? 学习注解有什么好处? 学完能做什么? 答:1. 能够读懂别人写的代码,特别是框架相关的代码: 2. 让编程更加简洁,代码更加清晰: 3. 让别人高看一眼. spring.mybati ...
- Java注解实践
Java注解实践 标签 : Java基础 注解对代码的语意没有直接影响, 他们只负责提供信息给相关的程序使用. 注解永远不会改变被注解代码的含义, 但可以通过工具对被注解的代码进行特殊处理. JDK ...
- Java注解全面解析(转)
1.基本语法 注解定义看起来很像接口的定义.事实上,与其他任何接口一样,注解也将会编译成class文件. @Target(ElementType.Method) @Retention(Retentio ...
- java注解(基础)
一.认识注解 1.注解的定义: java提供了一种原程序中的元素关联任何信息和元数据的途径和方法. 2.学习注解的目的: (1)能够读懂别人写的代码,特别是框架相关的代码(框架中使用注解是非常方便的) ...
随机推荐
- RabbitMQ相关使用命令
启动:rabbitmq-server -detached 停止:rabbitmqctl stop 状态:rabbitmqctl status 查看所有用户rabbitmqctl list_users ...
- 手写符合Promise/A+规范的Promise
const PENDING = "pending"; const RESOLVED = "resolved"; const REJECTED = "r ...
- python 安装 pip ,并使用pip 安装 filetype
闲话少说,直接上操作. python版本为2.7.6 可以直接到官网下载,我也提供一个百度云的下载地址 https://pan.baidu.com/s/1kWPXG8Z 这个是window版本,lin ...
- postgres - 以单用户模式运行一个 PostgreSQL服务器
SYNOPSIS postgres [ -A 0 | 1] [ -B nbuffers] [ -c name=value] [ -d debug-level] [ --describe-config ...
- 三、Windows下用FFmpeg+nginx+rtmp搭建直播环境 实现推流、拉流
一.环境 1.开发环境:windows 2.开发工具:FFmpeg.nginx.nginx-rmtp-module (链接:https://pan.baidu.com/s/119d2GeMzddas_ ...
- 基于cdn方式的vue+element-ui的单页面架构
一.下载vue2.x,下载element-ui.js以及css 二.html文件 <!DOCTYPE html> <html> <head> <meta ch ...
- alert(1) to win
一. function escape(s) { return '<script>console.log("'+s+'");</script>'; } 两种思 ...
- [sqlmap源码阅读] 数据库识别
通过网页返回的数据库错误信息识别网站所有数据库类型,用到的正则表达式及支持识别的数据库类型,这些信息以xml文件的形式存在,使用 sax 解析xml.
- Vue.js 技术揭秘学习 (2) Vue 实例挂载的实现
Vue 中我们是通过 $mount 实例方法去挂载 vm 的 $mount 方法实际上会去调用 mountComponent 方法,mountComponent 核心就是先实例化一个渲染Watcher ...
- css 伪类选择器:checked实例讲解
css :checked伪类选择器介绍 css :checked伪类选择器用于选择匹配所有被选中的单选按钮(radio)或复选框(checkbox),你可以结合:checked伪类选择器和:not选择 ...