作家
登录

Java中的注解是如何工作的

作者: 来源: 2017-11-17 11:18:52 阅读 我要评论

ElementType.CONSTRUCTOR

Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践


Java中的注解是若何工作的

自Java5.0版本惹人注解之后,它就成为了Java平台中异常重要的一部分。开辟过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated如许的注解。这篇文┞仿中,我将向大年夜家道述到底什么是注解,为什么要惹人注解,注解是若何工作的,若何编写自定义的注解(经由过程例子),什么情况下可以应用注解以及最新注解和ADF(应用开辟框架)。这会花点立时光,所认为本身预备一杯咖啡,让我们来进入注解的世界吧。

用一个词就可以描述注解,那就是元数据,即一种描述数据的数据。所以,可以说注解就是源代码的元数据。比如,下面这段代码:

  1. @Override 
  2.  
  3. public String toString() { 
  4.  
  5. return "This is String Representation of current object."
  6.  
  7.  

膳绫擎的代铝闼楝我重写了toString()办法并应用了@Override注解。然则,即使我不应用@Override注解标记代码,法度榜样也可以或许正常履行。那么,该注解表示什么?这么写竽暌剐什么好处吗?事实上,@Override告诉编译器这个办法是一个重写办法(描述办法的元数据),如不雅父类中不存在该办法,编译器便会报错,提示该办法没有重写父类中的办法。如不雅我不当心拼写缺点,例如将toString()写成了toStrring(){double r},并且我也没有应用@Override注解,那法度榜样依然能编译运行。但运行结不雅会和我期望的大年夜不雷同。如今我们懂得了什么是注解,并且应用注解有助于浏览法度榜样。

Annotation是一种应用于类、办法、参数、变量、构造器及包声明中的特别润饰符。它是一种由JSR-175标准选择用来描述元数据的一种对象。

@Documented –注解是否将包含在JavaDoc中

为什么要惹人注解?

假如你想为应用设置很多的常量或参数,这种情况下,XML是一个很好的选择,因为它不会同特定的代码相连。如不雅你想把某个办法声明为办事,那么应用Annotation会更好一些,因为这种情况下须要注解和办法慎密耦合起来,开辟人员也必须熟悉到这点。

另一个很重要的身分是Annotation定义了一种标准的描述元数据的方法。在这之前,开辟人员平日应用他们本身的方法定义元数据。例如,应用标记interfaces,注释,transient关键字等等。每个法度榜样员按照本身的方法定义元数据,而不像Annotation这种标准的方法。

今朝,很多框架将XML和Annotation两种方法结合应用,均衡两者之间的利弊。

Annotation是若何工作的?怎么编写自定义的Annotation?

在讲述这部分之前,建议你起首下载Annotation的示例代码AnnotationsSample.zip 。下载之后放在你习惯应用的IDE中,这些代码会赞助你更好的懂得Annotation机制。

编写Annotation异常简单,可以将Annotation的定义同接口的定义进行比较。我们来看两个例子:一个是标准的注解@Override,另一个是用户自定义注解@Todo。

  1. @Target(ElementType.METHOD) 
  2.  
  3. @Retention(RetentionPolicy.SOURCE) 
  4.  
  5. public @interface Override { 
  6.  
  7.  

对于@Override注释你可能有些疑问,它什么都没做,那它是若何检查在父类中有一个同名的函数呢。当然,不要惊奇,我是逗你玩的。@Override注解的定义不仅仅只有这么一点代码。这部分内容很重要,我不得不再次反复:Annotations仅仅是元数据,和营业逻辑无关。懂得起来竽暌剐点艰苦,但就是如许。如不雅Annotations不包含营业逻辑,那么必须有仁攀来实现这些逻辑。元数据的用户来做这个工作。Annotations仅仅供给它定义的属性(类/办法/包/域)的信息。Annotations的用户(同样是一些代码)来攫取这些信息并实现须要的逻辑。

我们来逐个讲述编写自定义Annotations的要点。膳绫擎的例子中,你看到一些注解应用在注解上。

J2SE5.0版本在 java.lang.annotation供给了四种元注解,专门注解其他的注解:

@Retention –什么时刻应用该注解

@Target? –注解用于什么处所

@Inherited – 是否许可子类持续该注解

@Documented–一个简单的Annotations标记注解,表示是否将注解信息添加在java文档中。

如今我们开端评论辩论文┞仿的最后一部分了。应用法度榜样框架,被称为ADF,由Oracle开辟用来创建Oracle融合应用。我们已经懂得了注解的优缺点,也知道若何编写自定义的注解,但我们应当将注解应用在ADF的哪部分呢?ADF是否供给了一些朴实的注解?很好的问题,确实袈溱ADF中大年夜量应用注解有一些限制。之前提到的应用框架如Spring和Hibernate应用AOP(面向侧面的法度榜样设计)。在AOP中,框架供给了一种机制,在事宜的预处理和后续处理中注入代码。例如:你有一个钩子用来在办法履行之前和之后添加代码,所以你可以在这些处所编写你的用户代码。ADF不应用AOP。如不雅我们有任何注解的用例可用,我们可能须要经由过程持续的方法实现。


  推荐阅读

  来了,支持 iOS 开发的 Kotlin/Native v0.4 发布

Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 下面是 v0.4 中新平台库的使悠揭捉?示。Kotlin / Native v0.4 已宣布,这也恰是在 KotlinConf 2017 上宣>>>详细阅读


本文标题:Java中的注解是如何工作的

地址:http://www.17bianji.com/lsqh/38975.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)