您的位置:网站首页 > Java工具 > 正文

java注解研究

类别:Java工具 日期:2020-4-24 4:38:06 人气: 来源:

  ,另一种是XML。采用注解可以提供更大的便捷性,易于修改,但耦合度高,而 XML 相对于注解则是相反的。两者各有优劣,本文主要讲注解。

  它的形式跟接口很类似,不过前面多了一个 @ 符号。的代码就创建了一个名字为 MyAnnotation的注解。

  不过这样注解还不能工作,还需要一些标识告诉编译器这个注解用在什么地方,以及它的生命周期等。这些标识就是元注解。

  元注解是可以注解到注解上的注解,或者说元注解是一种基本注解,但是它能够应用到其它的注解。

  Retention 的英文意为保留期的意思。当 @Retention 应用到一个注解上的时候,它解释说明了这个注解的的存活时间。

  RetentionPolicy.SOURCE:只在本编译单元的编译过程中保留,并不写入Class文件中。这种注解主要用于在本编译单元(这里一个Java源码文件可以看作一个编译单元)内触发注解处理器(annotation processor)的相关处理,例如说可以让注解处理器相应地生成一些代码,或者是让注解处理器做一些额外的类型检查,等等。例如:@Override、@SuppressWarnings

  RetentionPolicy.CLASS:在编译的过程中保留并且会写入Class文件中,但是JVM在加载类的时候不需要将其加载为运行时可见的(反射可见)的注解。这里很重要的一点是编译多个Java文件时的情况:假如要编译A.java源码文件和B.class文件,其中A类依赖B类,并且B类上有些注解希望让A.java编译时能看到,那么B.class里就必须要持有这些注解信息才行。同时我们可能不需要让它在运行时对反射可见(例如说为了减少运行时元数据的大小之类),所以会选择CLASS而不是RUNTIME。

  RetentionPolicy.RUNTIME:在编译过程中保留,会写入Class文件,并且JVM加载类的时候也会将其加载为反射可见的注解。这就不用多说了,例如说Spring的依赖注入就会在运行时通过扫描类上的注解来决定注入啥。

  的代码中,我们指定 MyAnnotation可以在程序运行周期被获取到,因此它的生命周期非常的长。

  是继承的意思,但是它并不是说马谡街亭败给谁注解本身可以继承,而是说如果一个超类被 @Inherited 注解过的注解进行注解的话,那么如果它的子类没有被任何注解应用的话,那么这个子类就继承了超类的注解。

  注意的代码,@Repeatable注解了Person。而@Repeatable后面括号中的类相当于一个容器注解。

  从可以看出我们自定义的注解HelloAnnotation是一个接口,而$Proxy1这个Java生成的动态代理类就是它的实现类

  提到MyAnnotation继承Annotation接口,翻了源码没发现在哪里继承了,到底是什么回事呢?

  (2)虚拟机规范定义了一系列和注解相关的属性表,也就是说,无论是字段、方法或是类本身,如果被注解修饰了,就可以被写进字节码文件。属性表有以下几种:深圳代理记账http://26890.shop.m.liebiao.com/。

  

0
0
0
0
0
0
0
0
下一篇:没有资料

相关阅读

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

郑重声明:本站资源来源网络 如果侵犯了你的利益请联系站长删除

CopyRight 2010-2012 技术支持 FXT All Rights Reserved