读书人

对java annotation的懂得

发布时间: 2013-08-01 15:23:18 作者: rapoo

对java annotation的理解

? ??这部分代码的运行结果如下:

Test public static void Foo.m3() failed: java.lang.RuntimeException: Boom Test public static void Foo.m7() failed: java.lang.RuntimeException: Crash Passed: 2, Failed 2

? ? 有了我们前面对annotation应用的描述,我们也可以将他们使用的场景扩展到其他应用。比如说AOP,加入我们希望某个方法的执行之前或者之后要执行某个特定的方法。我们就可以给这个方法添加一个特定的标注,比如@ExecuteBefore。在处理这些方法的时候读取到这个标注的就先根据指定的参数去执行那个方法,等执行完毕之后再执行该方法。这样,一个AOP的实现就完成了。关于AOP具体实现的讨论大家可以去参考一些关于spring详细实现的讨论。?

总结

? ? annotation在程序里相当于提供了一种metadata,通过设置的这些元数据。使用程序的编译和运行环境可以根据需要做一些特定的处理。使用这些程序的代码可以利用反射等机制来读取到这些metadata然后做一些特定的行为。正因为有了这么一种灵活性,我们一些AOP,JUNIT测试方法执行等概念的实现都可以通过这种机制实现。java的annotation和其他语言的特性有极大的相似点。比如在C#中的attribute, Python中的decorator,他们都是为了达到同样的目的。

参考材料

http://www.vogella.com/articles/JavaAnnotations/article.html

http://tutorials.jenkov.com/java-reflection/annotations.html

http://tutorials.jenkov.com/java/annotations.html

?

http://docs.oracle.com/javase/1.5.0/docs/guide/language/annotations.html

读书人网 >编程

热点推荐