zoukankan      html  css  js  c++  java
  • JAVA 注解的学习和对Spring注解的理解

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28364999/article/details/79581199
    注解的作用
    1》生成文档,比如我们用的ide里面会自动加上比如@param,@return,@author等注解。

    2》编译时格式检查。这个最常见的是@override,@SuppressWarnings等等。

    3》跟踪代码依赖性,实现替代配置文件功能。

    元注解
    在包 java.lang.annotation 中包含所有定义【自定义注解】所需用到的原注解和接口。如接口 java.lang.annotation.Annotation 是所有注解继承的接口,并且是自动继承,不需要定义时指定,类似于所有类都自动继承Object。查看Documented.class,可以看到这是个借口。它有三个注解(@Documented,@Retention,@Target),除此外,还有@Inherited,构成4个元注解。

    @Documented 将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。

    在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等。

    @Retention 表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中,包括: 
              RetentionPolicy.SOURCE 注解将被编译器丢弃 
              RetentionPolicy.CLASS 注解在class文件中可用,但会被VM丢弃 
              RetentionPolicy.RUNTIME VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。

    @Target 表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中,包括: 
              ElemenetType.CONSTRUCTOR 构造器声明 
              ElemenetType.FIELD 域声明(包括 enum 实例) 
              ElemenetType.LOCAL_VARIABLE 局部变量声明
              ElemenetType.ANNOTATION_TYPE 作用于注解量声明
              ElemenetType.METHOD 方法声明
              ElemenetType.PACKAGE 包声明 
              ElemenetType.PARAMETER 参数声明 
              ElemenetType.TYPE 类,接口(包括注解类型)或enum声明 

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

    具体实例参考点击打开链接的例2

    总结
    1、所有的注解类都隐式继承于 java.lang.annotation.Annotation,注解不允许显式继承于其他的接口。

    2、注解不能直接干扰程序代码的运行,无论增加或删除注解,代码都能够正常运行。Java语言解释器会忽略这些注解,而由第三方工具负责对注解进行处理。

    3、一个注解可以拥有多个成员,成员声明和接口方法声明类似,这里,我们仅定义了一个成员,成员的声明有以下几点限制:
    a)   成员以无入参无抛出异常的方式声明,如boolean value(String str)、boolean value() throws Exception等方式是非法的;
    b)   可以通过default为成员指定一个默认值,如String level() default "LOW_LEVEL"、int high() default 2是合法的,当然也可以不指定默认值;
    c)   成员类型是受限的,合法的类型包括原始类型及其封装类、String、Class、enums、注解类型,以及上述类型的数组类型。如ForumService value()、List foo()是非法的。
    d)   如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=),如@Description("使用注解的实例")。注解类拥有多个成员时,如果仅对value成员进行赋值则也可不使用赋值号,如果同时对多个成员进行赋值,则必须使用赋值号,如@DeclareParents (value = "NaiveWaiter", defaultImpl = SmartSeller.class)。
    e)   注解类可以没有成员,没有成员的注解称为标识注解,解释程序以标识注解存在与否进行相应的处理;
    ---------------------
    作者:浮生丶丶
    来源:CSDN
    原文:https://blog.csdn.net/qq_28364999/article/details/79581199
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    【leetcode】416. Partition Equal Subset Sum
    【leetcode】893. Groups of Special-Equivalent Strings
    【leetcode】892. Surface Area of 3D Shapes
    【leetcode】883. Projection Area of 3D Shapes
    【leetcode】140. Word Break II
    【leetcode】126. Word Ladder II
    【leetcode】44. Wildcard Matching
    【leetcode】336. Palindrome Pairs
    【leetcode】354. Russian Doll Envelopes
    2017.12.22 英语面试手记
  • 原文地址:https://www.cnblogs.com/anyiz/p/10605538.html
Copyright © 2011-2022 走看看