全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

深入理解Java注解的使用方法

注解是jdk1.5新增的特性.大家都知道,jdk1.5在java的发展史上有着划时代的意义.而注解的出现,在某种程度上颠覆了框架的设计.比如,spring在注解出现后,改善了原先五大组件的模式,增加了基于注解的实现方式.现在重点讲讲注解的使用.

元注解:

      jdk1.5定义了4个元注解,元注解的作用是注解其他的注解.

       1.@Retention

       2.@Target

       3.@Documented

       4.@Inherited

       @Retention用于指明该注解存在的时机.参数有三个值可选:RetentionPolicy.SOURCE,RetentionPolicy.CLASS,RetentionPolicy.RUNTIME可供选择.分别表示:源码中保留注解,字节码文件中保留注解,运行时保留注解.

       @Target用于指明注解能作用的范围.比如参数中设置为ElementType.TYPE,表示作用于类和接口.如果你用来注解方法,则会发生编译错误.由此可见它的功能是通过编译器实现的.

       @Documented表明该注解在使用javadoc工具生成开发文档时,也会被纳入进去.

       @Inherited表明,某个位置使用该注解,那么在存在Java继承关系的地方,该注解也能被继承过来.这个可能不好理解.下面的代码加以说明.     

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
@Inherited
public @interface AnnoInherited {
  
}


测试代码:

public class TestAnnoInherated {
  public static void main(String[] args) {
    Annotation[] annos=new Goo().getClass().getAnnotations();
    for(Annotation a:annos){
      System.out.println(a);
    }
  }
}

@AnnoInherited
class Foo{
  
}

class Goo extends Foo{
  
}  

控制台输出:

@test.annotation.AnnoInherited()

上例中Goo前面并没有加注解@AnnoInherited,但是父类Foo前面有,而@AnnoInherited加了元注解@Inherited,所以Foo能继承过来.

自定义注解:

自定义注解的实例如下.

package test.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AnimalInfo {
  String shout() default "";
  
  //能不能看门
  boolean isGuard() default true;
}

测试代码:

public class TestAnimalInfo {
  public static void main(String[] args) {
    Animal animal=new Animal();
    AnimalInfo info=animal.getClass().getAnnotation(AnimalInfo.class);
    if(info!=null){
      Annotation anno=info;//此处并没有报错.Annotation是一个接口.info是一个注解.这是因为编译器会将注解编译成接口,并且继承了Annotation
      System.out.println("Annotation类信息:"+Annotation.class);
      System.out.println("AnimalInfo类信息:"+AnimalInfo.class);
      Class[] cs=AnimalInfo.class.getInterfaces();
      for(Class c:cs){
        System.out.println(c); //AnimalInfo编译后就是一个接口,并且继承了Annotation,这里得到了证实.
      }
      System.out.println("info对象的类信息:"+info.getClass());
      if("wangwang".equals(info.shout())&&info.isGuard()){
        System.out.println("the animal is a dog");
      }else if("miaomiao".equals(info.shout())&&!info.isGuard()){
        System.out.println("the animal is a cat");
      }else{
        System.out.println("the animal is not a dog or cat");
      }
    }else{
      System.out.println("it's not a animal");
    }
  }
}

@AnimalInfo(shout="wangwang",isGuard=true)
class Animal{
  
}

控制台输出:

Annotation类信息:interface java.lang.annotation.Annotation
AnimalInfo类信息:interface test.annotation.AnimalInfo
interface java.lang.annotation.Annotation
info对象的类信息:class com.sun.proxy.$Proxy1
the animal is a dog

代码分析:从控制台可以看到.@AnimalInfo注解其实编译后就是接口,并且它继承了Annnotation.而通过反射获得的注解实例,名字为$Proxy1,是一个类的对象.可见,该注解实例是JVM通过动态代理技术生成的.这也揭示了注解特性的底层实现原理.关于注解的具体底层技术原理,这里不再详谈.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java  # 注解  # Java注解与反射原理说明  # Java注解处理器学习之编译时处理的注解详析  # Java注解Annotation与自定义注解详解  # Java注解处理器简单实例  # Java注解机制之Spring自动装配实现原理详解  # 深入理解 Java注解及实例  # 浅谈Java注解和动态代理  # 详解Java注解的实现与使用方法  # java注解的全面分析  # 全面剖析java中的注解(Annotation)  # 是一个  # 自定义  # 继承了  # 如果你  # 也会  # 大家都  # 也能  # 其他的  # 这也  # 可以看到  # 五大  # 可选  # 报错  # 设置为  # 会将  # 这是因为  # 则会  # 大家多多  # 可供选择  # 作用于 


相关文章: 深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  如何用好域名打造高点击率的自主建站?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  建站之星价格显示格式升级,你的预算足够吗?  如何零成本快速生成个人自助网站?  如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  开心动漫网站制作软件下载,十分开心动画为何停播?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  建站之星后台密码遗忘?如何快速找回?  如何零基础在云服务器搭建WordPress站点?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何通过远程VPS快速搭建个人网站?  如何在云指建站中生成FTP站点?  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  如何在IIS中新建站点并配置端口与IP地址?  开源网站制作软件,开源网站什么意思?  做企业网站制作流程,企业网站制作基本流程有哪些?  网页设计网站制作软件,microsoft office哪个可以创建网页?  如何在香港免费服务器上快速搭建网站?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  青浦网站制作公司有哪些,苹果官网发货地是哪里?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  如何快速搭建个人网站并优化SEO?  python的本地网站制作,如何创建本地站点?  如何高效生成建站之星成品网站源码?  宝塔新建站点为何无法访问?如何排查?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  如何在服务器上三步完成建站并提升流量?  nginx修改上传文件大小限制的方法  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  建站主机如何选?高性价比方案全解析  如何在IIS管理器中快速创建并配置网站?  深圳网站制作的公司有哪些,dido官方网站?  网站app免费制作软件,能免费看各大网站视频的手机app?  制作旅游网站html,怎样注册旅游网站?  如何在万网主机上快速搭建网站?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  太原网站制作公司有哪些,网约车营运证查询官网?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  建站之星在线客服如何快速接入解答?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  教育培训网站制作流程,请问edu教育网站的域名怎么申请?  相册网站制作软件,图片上的网址怎么复制?  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  外贸公司网站制作哪家好,maersk船公司官网?  如何基于云服务器快速搭建个人网站?  无锡营销型网站制作公司,无锡网选车牌流程? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。