@Target(ElementType.ANNOTATION_TYPE)如何工作

Java标注用@Target标注来标记,以声明可以通过该标注进行修饰的可能的连接点。 ElementType枚举的TYPEFIELDMETHOD等是清楚且简单易懂的。

为什么要使用@Target(ANNOTATION_TYPE)值? 什么是注释注释有用? 他们的贡献是什么? 给我一个想法解释,它是如何工作的 ,为什么我应该使用它。 一些已经存在而且众所周知的使用例子也会很好。

您可以使用注释注释来创build元注释,例如在Spring中考虑使用@Transactional

 /** * Shortcut and more descriptive "alias" for {@code @Transactional(propagation = Propagation.MANDATORY)}. */ @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Transactional(propagation = Propagation.MANDATORY) public @interface RequiresExistingTransaction { } 

当你启用Spring来处理@Transactional注解时,它将查找带有@Transactional 或其任何元注解(用@Transactional注解的注释)的类和方法。

无论如何,这只是一个具体的例子,如何可以使用注释的注释。 我想这主要是Spring这样的框架,在这个框架中使用它们是有意义的。

例如,如果注释看起来像

 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface SomeAnnotation { String description() default "This is example for class annotation"; } 

编译器会在这种情况下发生

 @SomeAnnotation public class SomeClass { @SomeAnnotation // here it's complaning public void someMethod(){} } 

如果你改变

 @Target(ElementType.TYPE) 

 @Target({ElementType.METHOD, ElementType.TYPE}) 

它不会再抱怨了。

注释基本上是与您的代码一起的附加元数据(信息)。 它可以放在边types(类,接口),方法和参数。

在编译时和运行时通常很有用。 许多stream行的API(如Java EE 5+,Spring,AspectJ)均使用注释来提高代码的清晰性和一致性。

使用注释经常可以使代码更易读,更易于理解。

我build议您阅读Java教程的注释章节

在过去,元数据通常是以xml文件的forms给出的,如果有人想要查看不同的xmlconfiguration文件,就很难理解这些代码。 最新的Java servlet API允许简单地使用注释来映射servlet,而不是web.xml映射 :

 @WebServlet("/response") public class ResponseServlet extends HttpServlet { // servlet code here... }