java 自定义注解实践 背景 最近在为公司的技术改造做准备,我设计了一个提高Web 开发效率的技术框架,为了增加框架的友好性和易用性,决定采用注解来代替配置文件,于是我查询了很多的资料,进行整理和学习
概念 注解是JDK5 引入的新特性,最初衍生自代码注释,但现在早已经超出了注释的范畴,以至于我很惶恐,不敢使用注释这个词汇来描述他,尽管现有的很多资料里仍然称其为注释
如果说反射使得很多技术实现(动态代理、依赖注入等)有了基础,那么注解就是使这些技术实现变得平民化的基础
从 class 文件规范中可以看出,JDK5 开始,class 文件已经引入了注解描述片段
站在java虚拟机的角度来看,class 保留和运行时保留的注解已经和java 二进制码放在了同等的地位
虚拟机在加载 class 文件时,会为注解内容分配空间并进行解析,最终还会为注解和对应的二进制码建立关联
尽管这些注解不会被运行,但其对代码的说明能力,结合反射技术已经足够我们做太多的事情
我们知道,java 除了内置的注解(@Override、@Deprecated 等)以外,还支持自定义注解(Struts、Hibernate 等很多框架甚至java 自身都实现了很多自定义注解)
当然,更为厉害的是元注解,元注解是用来描述注解的注解(光听着就觉得厉害了吧)
要实现一个自定义注解,必须通过@interface 关键字来定义
且在@interface 之前,需要通过元注解来描述该注解的使用范围(@Target)、生命周期(@Retention)及其他(其他的不重要,所以领盒饭了)
@Target 用于描述注解的使用范围(即:被描述的注解可以用在什么地方),其取值有: 取值 描述 CONSTRUCTOR 用于描述构造器(领盒饭)
FIELD 用于描述域(领盒饭)
LOCAL_VARIABLE 用