java 注解,annotation基础学习

元注解--------@Tatget @inherited @Retention @Documented

@Retention:这个注解注在其他注解上,并用来说明如何存储已被标记的注解。用来标记注解并提供注解的信息。可能 的值是:

  • SOURCE: 表明这个注解会被编译器忽略,并只会保留在源代码中。
  • CLASS: 表明这个注解会通过编译驻留在CLASS文件,但会被JVM在运行时忽略,正因为如此,其在运行时不可见。
  • RUNTIME:表示这个注解会被JVM获取,并在运行时通过反射获取。

@Target:这个注解用于限制某个元素可以被注解的类型。例如:

ANNOTATION_TYPE --------------表示该注解可以应用到其他注解上

CONSTRUCTOR -------------------表示可以使用到构造器上FIELD 表示可以使用到域或属性上

LOCAL_VARIABLE-----------------表示可以使用到局部变量上。

METHOD---------------------------可以使用到方法级别的注解上。

PACKAGE--------------------------可以使用到包声明上。

PARAMETER-----------------------可以使用到方法的参数上

TYPE-------------------------------可以使用到一个类的任何元素上

@Documented:被注解的元素将会作为Javadoc产生的文档中的内容。注解都默认不会成为成为文档中的内容。这个注解可以对其它注 解使用。

@Inherited:在默认情况下,注解不会被子类继承。被此注解标记的注解会被所有子类继承。这个注解可以对类使用。

经常用到的一些注解:

  • @Override:向编译器说明被注解元素是重写的父类的一个元素。在重写父类元素的时候此注解并非强制性的,不过可以在重写错误时帮助编译器产生错误以提醒我们。比如子类方法的参数和父类不匹配,或返回值类型不同。
  • @Repeatable:说明该注解标识的注解可以多次使用到同一个元素的声明上。
  • @Test:这个注解向JUnit说明这个被注解的方法一定是一个可执行的测试方法。这个注解只能标识在方法上,并且被JVM保留至运行时。
  • @Before:这个注解用来向JUnit说明被标记的方法应该在所有测试方法之前被执行。这对于在测试之前设置测试环境和初始化非常有用。同样只适用于方法上:
  • @After:这个注解用来向JUnit说明被注解的方法应该在所有单元测试之后执行。这个注解通常用来销毁资源,关闭,释放资源或者清理,重置等工作。
  • @Ignore:这个方法用来向JUnit说明被注解的方法应该不被当作测试单元执行。即使它被注解成为一个测试方法,也只能被忽略。
  • @Component:说明被标记的元素,在本例中是一个类,是一个自动检测的目标。这意味着被注解的类,将会被Spring容器实例化并管理。
  • @Autowired:Spring容器将会尝试通过类型(这是一种元素匹配机制)使用这个set方法来自动装配。此注解也可以使用在构造器和属性上,Spring也会根据注解的地方不同采取不同的操作。
  • @FixMethodOrder:指定执行的顺序,正常情况下Junit处理程序负责它按照完全随机的无法预知的顺序执行。当所有的测试方法都相互独立的时候,不推荐使用这个注解。但是,当测试的场景需要测试方法按照一定规则的时候,这个注解就派上用场了。
  • @Deprecated:说明被标记的元素不应该再度使用。这个注解会让编译器产生警告消息。可以使用到方法,类和域上。相应的解释和 原 因,包括另一个可取代的方法应该同时和这个注解使用。

  • @SuppressWarnings:说明编译器不会针对指定的一个或多个原因产生警告。

  • @FunctionalInterface:这个注解表示一个函数式接口元素。函数式接口是一种只有一个抽象方法(非默认)的接口。编译器会检查被注解元素,如果不符,就会产生错误。