首页 课程 师资 教程 报名

Java中怎么自定义注解

  • 2020-02-17 13:27:33
  • 2005次 动力节点


Java中怎么自定义注解


  在Java框架中,经常会使用注解,而且还可以省很多事,来了解下自定义注解。


  注解是一种能被添加到java代码中的元数据,类、方法、变量、参数和包都可以用注解来修饰。注解对于它所修饰的代码并没有直接的影响


  先写一个自己的注解类


  @Documented//会被javadoc命令识别


  @Retention(RetentionPolicy.RUNTIME)//相当于作用时期,比如:运行期、编译期


  @Target({ElementType.METHOD})//相当于作用域,比如方法、类


  public@interfaceMyValue{


  Stringvalue();


  //也可以这么写,就是说,它的默认值是hello


  //Stringvalue()default"hello";


  }


  然后解析上边用到的那两个类:


  publicenumRetentionPolicy{


  SOURCE,


  CLASS,


  RUNTIME


  }


  publicenumElementType{


  /**Class,interface(includingannotationtype),orenumdeclaration*/


  TYPE,


  FIELD,


  METHOD,


  PARAMETER,


  CONSTRUCTOR,


  LOCAL_VARIABLE,


  ANNOTATION_TYPE,


  PACKAGE


  }


  可以看到,是两个枚举类,也就是我们自定义的注解有一定的时间和空间作用域。


  好了,我们的自定义注解已经完成了(对的,自定义注解就上边那一段代码),那我们就来看看要怎么有用呢?很容易啊,就和其他的注解一样,写在我们要用到的地方就好了。(对的,我确定不是在开玩笑)


  publicclassPerson{


  @MyValue(value="张三")


  privateStringname;


  /*


  为什么要写setter和getter,很快你就会知道


  */


  publicStringgetName(){


  returnname;


  }


  publicvoidsetName(Stringname){


  this.name=name;


  }


  }


  然后我们在其他地方去拿


  Personperson=newPerson();


  System.out.println(person.getName());//null


  //这就很难受,按道理来说,不是应该是张三吗?


  大家都知道,像Spring这种框架都是通过反射来实现的,我们就模拟一个“编译类”,我们是在属性上用的注解,所以就先用反射来拿到类的所有属性


  publicstaticvoidmain(String[]args)throwsNoSuchFieldException{


  Personperson=newPerson();


  //按理来说,我们是拿到这个Person.class的所有的属性,然后遍历,来挨个注入,但是这里我们明明确我们的属性名,所以就简单化了


  Fieldfield=Person.class.getDeclaredField("name");


  MyValueannotation=field.getAnnotation(MyValue.class);//拿到注解类


  Stringname=annotation.value();//这个value()就是我们在MyValue类中的的属性


  //然后我们就注入到这个类中,这时就用到了setter方法


  person.setName(name);


  System.out.println("通过自定义注解后的person的name是:"+person.getName());


  }


  是的,这样我们就通过了自定义注解给Person注入了一个name属性,但是在实际运用中不可能这么复杂,这只是入门了一下,我们可以将这个“模拟的编译类”组装成一个工具类,以便我们在实际中运用。


Java中怎么自定义注解


  以上就是动力节点Java培训机构小编介绍的“Java中怎么自定义注解”的内容,希望对大家有帮助,如有疑问,请在线咨询,有专业老师随时为你服务。


选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交