一、首先,我们来说一下注解是什么呢?它到底有什么作用呢?
JAVA 注解,有很多人把他理解为注释,解释。但功能不仅仅是解释那么简单。注解(Annotation)为我们在代码中添加信息提供了一种形式化的方法,是我们可以在稍后 某个时刻方便地使用这些数据(通过 解析注解来使用这些数据)。而且,注解的写法和注释的写法是完全不一样的,注解是@...,而注释一般是/*...*/这样的。例如我们现在经常用的SSM框架,我们在做CRUD操作的时候,我们会在控制层给一个@Controller注解,在业务层给一个@Service注解,在持久层给一个@Repository注解,那么有了这些个注解,我们就很清楚的知道它就是控制层、业务层、持久层。这就是对注解最基本的理解。
注解的作用:
1、生成文档。这是最常见的,也是Java 最早提供的注解。常用的有@see @param @return 等
2、跟踪代码依赖性,实现替代配置文件功能。比较常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。以后java的程序开发,最多的也将实现注解配置,具有很大用处;
3、在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。
二、 JAVA 元注解说到注解,那不得不说的就是元注解了,说到元注解,可能有很多人都对此比较陌生,我们每个程序员肯定都知道注解,也用过注解,但是应该很少有人去了解注解。
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。
元注解的作用就是负责注解其他注解。
Java定义的元注解有四个:
1.@Target
2.@Retention
3.@Documented
4.@Inherited
这些类型和它们所支持的类在java.lang.annotation包中可以找到。下面我们看一下每个元注解的作用和相应参数的使用说明。(在这我就只说下前两个我们一般比较常用的)
1.@Target
@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)
元注解的取值是用ElementType取的,即ElementType.值
那么,ElementType取值有:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述属性
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型)
下面我主要说下FIELD、METHOD、TYPE这三个经常用到的
使用实例:
我们首先来创建一个注解Fruit,顾名思义也就是说水果的意思
然后在来创建一个苹果类Apple,并且把Fruit这个注解分别给Apple里的类、属性、方法上边
那我们很明显可以看到属性和方法报错了,那也就是说我们上边@Target给的值ElementType.TYPE是来描述类的,不能描述属性以及方法等。如果只给了ElementType.TYPE这一个值那么就说明Fruit这个注解只能用到类上边。那如果属性和方法也想要用这个注解,或者说类、属性、方法都想用Fruit这个注解应该怎么办呢?下面实例说明一下:
可以看到又在@Target里边加了两个值(ElementType.FIELD、ElementType.METHOD),而且多了一个大括号。
我们如果想要将注解用到两个或两个以上的时候,就应该把值用大括号给括起来。那我们再看一下Apple类:
很明显,不报错了,那么我们也很容易发现ElementType.TYPE、ElementType.FIELD、ElementType.METHOD它们的作用,TYPE是描述类的,FIELD是描述属性的,METHOD是描述方法的。
说到这,我相信朋友们对@Target也了解的差不多了,那么@Target我就说到这里。
之后我会持续更出@Retention的相关东西。。。。。