zoukankan      html  css  js  c++  java
  • 浅谈注解(个人理解,如有疏漏欢迎大家补充)

    定义:

      注解历史:jdk5的新特性,在5之前一般都是用xml搭配反射机制,但这样搭配程序会很分散,由此注解诞生,完美体现出高内聚低耦合的特性,代码可读性更强。

      什么是注解(annotation):它是一个存储元数据的一个接口,可以通过反射机制来获取到指定程序元素的annotation对象(注解对象就是注解起作用的地方),然后通过注解对象来获取注解里的元数据。

                   注解并不会影响一个程序的执行或它本身的状态

        元数据(metadata):数据的数据,作用(用来约束数据的整体结构),如果元数据不好理解可以联想一下元注解,比如@Target({ElementType.METHOD,ElementType.TYPE}),这个元注解作用是规范了注解作用地方,此例规范注解作用在类和方法上,元数据那么就好理解了,它本质就是在定义/规范/约束数据的一个数据;

        理解了元数据,那么注解就好理解了,(一个存储元数据的接口);

        元数据几种常见作用:

          ①生成文档:这是最常见的,也是java 最早提供的注解。常用的有@param @return 等;

          ② 跟踪代码依赖性,实现替代配置文件功能。常见的是spring 2.5 开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量。;

          ③在编译时进行格式检查。如@override 放在方法前,如果你这个方法并不是覆盖了超类方法,则编译时就能检查出。

     jdk5定义的元注解

        @Retention(生命周期):通过它定义了一个注解 的生命周期

                    1.SOURCE:在源文件中有效(即源文件保留),比如:@override什么周期就是source,检测子类中方法是否与父类方法对应,当子类用@override重写的方法父类没有就会报错

                    2.CLASS:在class文件中有效(即class保留)
                    3.RUNTIME:在运行时有效(即运行时保留)

        @Target:定义了注解作用地方

             1.CONSTRUCTOR:用于描述构造器
             2.FIELD:用于描述域
             3.LOCAL_VARIABLE:用于描述局部变量
             4.METHOD:用于描述方法
             5.PACKAGE:用于描述包
             6.PARAMETER:用于描述参数
             7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

      

        @Inherited:

            @Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

       @Documented:

            @Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。

    相关注解的解释可参考:https://www.cnblogs.com/peida/archive/2013/04/24/3036689.html

  • 相关阅读:
    函数输出参数 双重指针
    NotePad++ 支持日语字体
    C++ 前置操作符与后置操作符
    用js判断 iPhone6 iPhone6 plus iphonex?
    从浏览器输入一个地址到渲染出网页这个过程发生了什么???
    对.Net 垃圾回收Finalize 和Dispose的理解
    在.NET环境中使用单元测试工具NUnit
    信道
    asp.net 获取当前URL的正确方法
    ASP.NET中常用输出JS脚本的类
  • 原文地址:https://www.cnblogs.com/CL-King/p/13863169.html
Copyright © 2011-2022 走看看