zoukankan      html  css  js  c++  java
  • java 注解的实现机制

    一.什么是注解:

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

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

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

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

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

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

           java 5.0开始,在java.lang.annotations中提供了四种元注解,专门注解其他的注解:@Target(注解用于什么地方)、@Retention(注解运行状态)、@Documented(生成说明文档,添加类的解释)、@Inherited(允许子类继承父类中的注解)

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

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

       @Retention — —注解运行状态

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

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

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

    参考代码:

    @Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Autowired {

    /**
    * Declares whether the annotated dependency is required.
    * <p>Defaults to {@code true}.
    */
    boolean required() default true;

    }

    boolean required() default true; 这句代码表明类的默认值是true

    个人看法:(不确定正确与否)
    bean 我们姑且叫做注解(Spring注解)
    代码中加载了注解的相应代码块被框架标记(就像是游戏中的仇恨标记一样)
    程序通过URL访问时按照如下过程
    1、框架识别URL
    2、在controller注解中匹配URL(通过注解的value或者path)
    3、在service注解中匹配相关接口
    4、在Repository注解中匹配数据库查询相关操作接口以及实现
    
    这些就相当于以注解为单位,用注解(零件)组合成一个完整的操作(产品)
    (零件 --> 产品 的关系)
    而注解功能的实现则是基于java的反射机制来实现的
    
    反射机制(粗略的看法):调用一个类(比如说是工具类)可以获得使用该类下的任何一个属性或者是方法
    一己之见









    痛苦预示着超脱
  • 相关阅读:
    spark简单入门
    vim 树形目录插件NERDTree
    Windows下查看系统端口使用的命令
    网络爬虫爬取动态网页
    Java并查集链表实现
    基于mahout的海量数据关联规则挖掘
    高维特征降维方法-随机映射
    JVM(4)--垃圾回收算法
    Java高并发程序设计(六)--线程池(1)
    Java高并发程序设计(五)--ReentrantLock源码解析
  • 原文地址:https://www.cnblogs.com/supperlhg/p/8550505.html
Copyright © 2011-2022 走看看