@Target(ElementType.ANNOTATION_TYPE)如何工作
Java标注用@Target
标注来标记,以声明可以通过该标注进行修饰的可能的连接点。 ElementType
枚举的TYPE
, FIELD
, METHOD
等是清楚且简单易懂的。
题
为什么要使用@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... }