Java Annotation (注解)前传

注解,这个东西我们在写代码的时候,总能看到,而且泛滥。比如@Override、@Controller 等等吧,随处可见。

那这个注解有什么用呢。


这里有个类比
注释:代码中的注释是给程序员看的,告诉程序员,这个方法是干啥的,这行代码是干啥的,通过注释程序员可以清楚的了解代码的含义。
注解:代码中的注解是给程序看的,看清楚!是程序,其他的程序,而不是程序员,不是给人看的。是给程序看的。是告诉其他的程序我这里要做什么。
 

public class StudentService{

	/**
     * 查询学生信息列表
     *
     * @author CuiErdan
     * @return List
     */
     public List findStudentList();

}

public class StudentServiceImpl implements StudentService{


	/**
     * 查询学生信息列表
     *
     * @author CuiErdan
     * @return List
     */
     @Override
     public List findStudentList(){
       //   忽略
     }

}

代码中的注释是给程序员看,这个方法是获取学生信息列表的。
而@Override 这个注解是告诉Java 编译器(其它程序),这个方法重写了父类/接口的方法,Java 编译器会帮助你检查重写的方法的信息对不对,方法名是否一样,参数是否一样等等,如果不一样,Java 编译器会给你报错的。

从上面代码的例子中,简单理解一下注解的一个用途。

你也可以这样理解注解,注解其实就像是一个配置文件一样,其他的程序,或者框架,通过这个配置文件来帮助你做一些事情,上面的就是帮助我们检查代码的正确性。只不过是这个配置文件的形式有些特别,和我们总是用的XML配置文件形式上不一样,但是可以完成类似的工作。

你在代码中写上了注解,在代码编译的时候或者是在运行的时候,就会有其他的工具类程序,来监听查找你写的注解,之后根据你注解的含义来帮助你完成你想要做的事情。

注解是如何被利用起来的?

  • 定义注解
  • 使用注解
  • 读取注解

定义注解,就是我们创建一个注解。
使用注解,我们基本上停留在这个阶段,因为Java 已经内置了很多注解,我们直接使用就可以了。或者是我们引用其它插件的时候,插件会也会定义一些注解让我们使用,比如Spring、Mybatis 等框架中就有很多的注解。

读取注解,读取注解就是我们使用了一些注解之后,注解都帮助我们做了什么。这个事情大部分都是由Java虚拟机或者是其他框架来完成的。我们也可以自定义注解,在代码中使用自定义注解之后,我们也要写一些使用该注解,我们要的事情。注解的读取主要是通过反射机制读取的,我们可以通过反射查到一个类上有哪些注解,方法上有什么注解,成员变量上有什么注解,再根据注解的名称,通过反射机制,就可以生成一个类,来帮助我们完成一些事情了。

这个就像是我们写代码一样,我们的代码也有三个过程,源码(*.java)、二进制文件(*.class)、运行时的代码(Java虚拟机将二进制文件翻译成机器语言,让计算机工作)。这就是我们代码的生命周期,代码一辈子都经历了什么。
注解也有生命周期这一说,分别对应我们代码的生命周期,分别是SOURCE、CLASS、RUNTIME,也就是注解会在那个生命周期的位置上起作用,SOURCE只是在*.java的时候时起作用的,到了编译器编译我们代码的时候,编译器会把这个生命周期的注解过滤掉,其它的生命周期也都类似。
你在定义注解的时候,会告诉注解,它的生命周期是在那个位置的。

你可能感兴趣的:(Java)