深入理解 Java 注解 [元注解(一)]

一、首先,我们来说一下注解是什么呢?它到底有什么作用呢?

 
 

         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的相关东西。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值