注解用途
我们在使用spring MVC框架时用到了很多的注解,如:@Controller、@RequestMapping等等,spring框架通过反射获取到标签进行不同的逻辑处理。注解是代码的附属信息,它遵循一个基本原则:注解不能直接干扰程序代码的运行,无论是增加还是删除注解,代码都能正常运行。Java语言解释器会忽略这些注解,而由第三方工具负责对注解进行处理。第三方工具可以利用代码中的注解间接控制程序代码的运行,它们通过Java反射机制读取注解的信息,并根据这些信息更改目标程序的逻辑。
元注解
元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:
@Target
@Target主要限定注解的使用范围,通过枚举ElementType定义:
@Retention
@Retention用于描述注解的声明周期,即注解再什么范围内有效。
SOURCE:注解只存在与java源文件中,编译时会过滤掉;
CLASS:注解会被编译器编译到class文件中,但是不会被JVM加载;
RUNTIME:注解会被编译到class文件,并且会被JVM加载,并可以通过反射获取到。
@Documented
通过@Documented标注的注解可以通过文档工具文档化。
@Inherited
@Inherited是一个标记注解,表明该注解是可以被继承的。如果注解标记在class上,那么它的子类会继承该注解。
但是,实现类并不能继承其接口的注解,覆盖的方法也不能继承其父类方法的注解。
自定义注解
注解定义语法:public @interface 注解名 {定义体}
下面通过一个自定义注解看一下:
Java使用@interface修饰符来定义注解类,成员声明的限制:
1)成员已无入参、无抛出异常的方式声明;
2)可以通过default关键字为成员设置默认值,也可以不设置;
3)成员类型限制:
1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)
2.String类型
3.Class类型
4.enum类型
5.Annotation类型
6.以上所有类型的数组