欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Java中自定义注解类及使用实例解析

时间:2021-01-12 13:20:52|栏目:JAVA代码|点击:

这篇文章主要介绍了Java中自定义注解类并使用过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

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

先写一个自己的注解类

@Documented //会被javadoc命令识别
@Retention(RetentionPolicy.RUNTIME) //相当于作用时期,比如:运行期、编译期
@Target({ElementType.METHOD}) //相当于作用域,比如方法、类
public @interface MyValue {

  String value();
  //也可以这么写,就是说,它的默认值是hello
  //String value() default "hello";

}

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

public enum RetentionPolicy {
  SOURCE,
  CLASS,
  RUNTIME
}
public enum ElementType {
  /** Class, interface (including annotation type), or enum declaration */
  TYPE,
  FIELD,
  METHOD,
  PARAMETER,
  CONSTRUCTOR,
  LOCAL_VARIABLE,
  ANNOTATION_TYPE,
  PACKAGE
}

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

public class Person {
  
  @MyValue(value="张三")
  private String name;

  /*
  为什么要写setter和getter,很快你就会知道
   */
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }
}

然后我们在其他地方去拿

Person person = new Person();
System.out.println(person.getName());//null
//这就很难受,按道理来说,不是应该是张三吗?

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

public static void main(String[] args) throws NoSuchFieldException {
    Person person = new Person();

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

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

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

    //然后我们就注入到这个类中,这时就用到了setter方法
    person.setName(name);

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

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

上一篇:struts2如何使用拦截器进行用户权限控制实例

栏    目:JAVA代码

下一篇:java下使用kaptcha生成验证码

本文标题:Java中自定义注解类及使用实例解析

本文地址:http://www.codeinn.net/misctech/44364.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有