先从最简单的注解说起:@override最常见的注解,就是表明对父类方法的覆盖。如果不用@override注解会有什么影响那?如下面代码:
Class A{ Public void getService(); } Class B extends A{ Public void getSevice(); }
编译不会有任何问题,我们的目的是要覆盖A类的getService()方法,而事实上因为“笔误”定义了一个新的方法getSevice(),如果仍然调用B的getService()方法,后果可能就不是我们预期的结果了。但是如果我们使用@override注解,就表明我们现在要覆盖父类的方法,如果方法名匹配不到,编译器就会发出警告。
这样的好处在于使编译器自动的帮助我们检查源码。事倍功半,何乐不用?
其他类似的还有:@Deprecated,@SuppressWarnings
除了这些编译检查之外,注解还可以帮助我们生成文档,跟踪代码依赖,描述类相关的信息等。
可以看出注解与注释的区别:注解可能影响编译的,而注释对代码没有任何影响。我们可以定义注解的生命周期(@Retention)。
注解包java.lang.annotation包括四个元注解:@Documented @Inherited @Retention @Target,元注释是可以用于定义注解的注解。
Documented帮助我们生成文档,Inherited继承注解,Retention定义注解的生命周期,Target定义注解应用的对象。
Java注解:表明了一种配置信息
从某种角度来说,可以把注解看成是一个XML元素,该元素可以有不同的预定义的属性。而属性的值是可以在声明该元素的时候自行指定的。在代码中使用注解,就相当于把一部分元数据从XML文件移到了代码本身之中,在一个地方管理和维护。
注解的处理,对于运行时的注解,可以通过Java的反射机制读取注解的参数,根据注解参数做出相应的处理,这类似与xml配置文件,Spring也通过自定义注解来减少配置文件。
注解的解析也是通过Java的反射机制实现的。