谁能向我解释一下 java 内部注释是如何工作的?
我知道如何使用 java 中的 java.lang.annotation 库创建自定义注释。但我仍然不明白它的内部工作原理,例如 @Override 注释。
如果有人能详细解释这一点,我将非常感激。
各种注释之间的第一个主要区别是它们是否在编译时使用然后被丢弃(例如@Override
)或放置在已编译的类文件中并在运行时可用(如 Spring 的@Component
)。这是由@保留 http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Retention.html注释的策略。如果您正在编写自己的注释,则需要确定该注释是否在运行时有用(可能用于自动配置)或仅在编译时有用(用于检查或代码生成)。
当使用注释编译代码时,编译器会看到注释,就像看到源元素上的其他修饰符一样,例如访问修饰符(public
/private
) or final
。当它遇到注释时,它会运行一个注释处理器,它就像一个插件类,表示它对特定注释感兴趣。注释处理器通常使用反射 API 来检查正在编译的元素,并且可以简单地对它们运行检查、修改它们或生成要编译的新代码。@Override
是第一个的例子;它使用 Reflection API 来确保它可以在超类之一中找到方法签名的匹配项,并使用Messager
如果不能的话会导致编译错误。
有许多关于编写注释处理器的教程;这是一个有用的 http://travisdazell.blogspot.com/2012/10/writing-annotation-based-processor-in.html。查看方法the Processor界面 http://docs.oracle.com/javase/7/docs/api/javax/annotation/processing/Processor.html了解编译器如何调用注释处理器;主要操作发生在process
方法,每次编译器看到具有匹配注释的元素时都会调用该方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)