最新消息: 关于Git&GitHub 版本控制你了解多少?
您现在的位置是:群英 > 服务器 > 系统运维 >
java如何实现注解机制?
CSDN发表于 2020-09-19 17:46 次浏览
自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分。开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解。这篇文章中,我将向大家讲述到底什么是注解, java中注解的实现原理和机制是什么,让我们来进入注解的世界吧。

一.什么是注解:

     注解是标记,也可以理解成是一种应用在类、方法、参数、属性、构造器上的特殊修饰符。注解作用有以下三种:

       第一种:生成文档,常用的有@param@return等。

       第二种:替代配置文件的作用,尤其是在spring等一些框架中,使用注解可以大量的减少配置文件的数量。

       第三种:检查代码的格式,如@Override,标识某一个方法是否覆盖了它的父类的方法。

二.注解的底层实现原理:

       注解的底层也是使用反射实现的,我们可以自定义一个注解来体会下。注解和接口有点类似,不过申明注解类需要加上@interface,注解类里面,只支持基本类型、String及枚举类型,里面所有属性被定义成方法,并允许提供默认值。

       java 5.0开始,在java.lang.annotations中提供了四种元注解,专门注解其他的注解:

    @Target?  — —注解用于什么地方

    TYPE,  //给类(型)注解
    FIELD, //给字段注解,不要忘了,字段可以是对象
    METHOD, //给方法注解
    PARAMETER, //给参数注解
    CONSTRUCTOR, //给构造方法注解
    LOCAL_VARIABLE, //给局部变量注解
    ANNOTATION_TYPE,//给注解注解(这貌似把自己不当类来看)
    PACKAGE, //给包注解

   @Retention — —注解运行状态

   SOURCE, //源码状态运行,
   CLASS, //编译类文件时运行
   RUNTIME //运行时运行

   @Documented — — 生成说明文档,添加类的解释 

   @Inherited — —允许子类继承父类中的注解。

   我们自定义一个注解来感受下:

定义注解类:

 


  1.  
    @Target({ElementType.TYPE})
  2.  
    @Retention(RetentionPolicy.RUNTIME)
  3.  
    @Documented
  4.  
    public @interface User {
  5.  
    String name() default "张三";
  6.  
    }

 

 

由于我们的注解是类注解,所以我们创建一个类

 


  1.  
    @User
  2.  
    public class test {
  3.  
    }

 

到了这里,注解可能还没起什么作用。我们需要通过反向代理去读取类中定义的注解,读出来使用就简单了。

创建测试类,来读取:

 


  1.  
    public class testamin {
  2.  
    public static void main(String[] args) throws ClassNotFoundException{
  3.  
    Class<?> classTest=Class.forName("com.test.test");
  4.  
    Annotation[] ann=classTest.getAnnotations();
  5.  
    for(Annotation aa:ann){
  6.  
    User u=(User)aa;
  7.  
    System.out.println(u.name());
  8.  
    }
  9.  
    }
  10.  
    }

 

控制台输出了我们定义的注解,注解的初识就介绍到这里吧。

标签:java是什么
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐