目录

什么是注解

内置注解:

元注解:

自定义注解:


什么是注解

1.Annotation是从JDK5.0开始引入的新技术。
Annotation的作用:
2.不是程序本身,可以对程序作出解释。(这一点和注释(comment)没什么区别)
3.可以被其他程序(比如编译器等)读取。
Annotation的格式:
4.注解是以“@注释名”在代码中存在的,还可以 添加一些参数值,例如@SuppressWarnings(value="unchecked").
Annotation在哪里使用:
5.可以附加在package、class、method、field等上面,相当于给他们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。

内置注解:

@Override:定义在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明。

@Deprecated:定义在java.lang.Deprecated中,此注释可以用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素,通常是因为它很危险或者存在更好的选择。

@SuppressWarnings:定义在java.lang.SuppressWarnings中,用来抑制编译时的警告信息,与前两个注释有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好的:@SuppressWarnings("all")、@SuppressWarnings("unchecked")、@SuppressWarnings(value={"unchecked","deprecation"})等等。

//内置注解
public class Test01 {@Override//方法重写的注解public String toString() {return super.toString();}@Deprecated//该注解注释的方法不推荐程序员使用,但是可以用,或者存在其他更好的方式public static void test01(){System.out.println("这是测试");}@SuppressWarnings("all")//该注解注释的方法、类中不会出现警告public void test02(){String a = "测试a";}public static void main(String[] args) {test01();//被@Deprecated注解的方法调用时会有删除线,但是依然可以用。}
}

元注解:

元注解的作用就是负责注解其他注解,Java定义了4个标准的meta-annotation类型,他们被用来提供对其他annotation类型作说明。
这些类型和它们所支持的类在java.lang.annotation包中可以找到(@Target、@Retention、@Documented、@Inherited)
@Target:用于描述注解的使用范围(即:被描述的注解可以用在什么地方(类、方法、构造器等等))
@Target:注解的作用目标
@Target(ElementType.TYPE)   //接口、类、枚举
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR)  //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包   

@Retention:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(SOURCE<CLASS<RUNTIME)

@Retention:注解的保留位置         
@Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件中存在,在运行时可以通过反射获取到

@Document:说明该注解将被包含在javadoc中。

@Inherited:说明子类可以继承父类中的该注解。

import java.lang.annotation.*;//测试元注解
public class Test02 {@MyAnnotationpublic void test01(){}
}//定义一个注解
//@Target表示注解可以用在什么地方,ElementType.METHOD表示可用在方法上,可以传递一个数组
@Target(value = {ElementType.METHOD, ElementType.TYPE})
//@Retention表示注解在什么地方才有效,一般都写RetentionPolicy.RUNTIME,运行时都有效;RUNTIME>CLASS>SOURCE
@Retention(value = RetentionPolicy.RUNTIME)
//@Documented 表示是否将我们的注解生成在javaDOC中。
@Documented
//@Inherited子类可以继承父类的注解
@Inherited
@interface MyAnnotation{
}

自定义注解:

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。

分析:

@interface用来声明一个注解,格式:public @interface 注解明{定义内容}

其中的每一个方法实际上是声明了一个配置参数。

方法的名称就是参数的名称。

返回值类型就是参数的类型(返回值只能是基本类型,Class,String。enum)。

可以通过default来声明参数的默认值。

如果只有一个参数成员,一般参数名为value。

注解元素必须要有值,我们定义注解元素时,经常使用空字符串、0作为默认值。

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;//自定义注解
public class Test03 {//@MyAnno2(name = "奇怪的大冒险o") 注解可以显式赋值,如果没有默认值,必须给注解赋值@MyAnno2(name = "奇怪的大冒险o", schools = {"清华", "北大"})public void test1(){}@MyAnno3("测试")//如果参数为value的时候,可以省略valuepublic void test2(){}
}@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno2{//注解的参数,参数类型 参数名();String name() default "";int age() default 0;int id() default -1;//如果默认值为-1,代表不存在,就像indexof如果找不到就返回-1。String[] schools();
}@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno3{//只有一个参数,建议用value命名String value() default "";
}

spring框架注解多?注解到底是个什么东西?这篇文章给你讲明白相关推荐

  1. 看完这篇文章之后,终于明白了编译到底怎么回事。

    看完这篇文章之后,终于明白了编译到底怎么回事. 1 对于同一个语句,有如下三种:高级语言.低级语言.机器语言的表示 C语言  a=b+1; 汇编语言  mov -0xc(%ebp),%eax add ...

  2. 看完这篇文章之后,终于明白了编译到底怎么回事

    看完这篇文章之后,终于明白了编译到底怎么回事. 1 对于同一个语句,有如下三种:高级语言.低级语言.机器语言的表示 C语言  a=b+1; 汇编语言  mov -0xc(%ebp),%eax add ...

  3. java spring框架 注解_详解Java的Spring框架中的注解的用法

    1. 使用Spring注解来注入属性 1.1. 使用注解以前我们是怎样注入属性的类的实现: class UserManagerImpl implements UserManager { private ...

  4. 如果你每次面试前都要去背一篇Spring中Bean的生命周期,请看完这篇文章

    前言 当你准备去复习Spring中Bean的生命周期的时候,这个时候你开始上网找资料,很大概率会看到下面这张图: 先不论这张图上是否全面,但是就说这张图吧,你是不是背了又忘,忘了又背? 究其原因在于, ...

  5. 规模化敏捷框架何从入手?这篇文章把SAFe讲透了!

    摘要:敏捷软件开发理念已渐渐被业界普遍接受,越来越多的公司和团队不得不面对一个新的问题,就是规模化敏捷的引入和实现.目前市场上规模化框架主要有SAFe,Less,Scrum of Scrums, Sp ...

  6. Spring框架bean的注解管理方法之一 使用注解生成对象

    首先在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.baidu.com/s/1qXLH ...

  7. Spring框架中@Primary注解的作用

    @Primary注解 @Primary的作用就是当一个接口存在多个实现类时,我们就可以通过@Primary注解来指明哪个实现类作为首选进行自动装配注入. 如果不加@Primary注解,接口ICarSe ...

  8. SAP BOPF和Spring框架里加了注解的控制器是如何被调用的

    BOPF的这些determination,其方法不需要application developer自己去调用,而是被BOPF框架通过调用interface method的方式被调用. Spring MV ...

  9. SaaS到底是什么,如何做?这份笔记讲明白了

    近年来,市场上出现了一批优秀的SaaS公司,发起了对传统软件模式的挑战.到底什么是SaaS,SaaS有什么优势?一直以来都是我十分关注的问题. 一切IT皆服务,作为一个"数据工作者" ...

最新文章

  1. SpringRestTemplate用法详解
  2. .NET新手系列(六)
  3. TinyXML2 的使用
  4. Flash存储控制器组成!(flash)
  5. maven-约定优于配置
  6. [Windows Server] 在 Windows Server 2012 上安裝 .NET Framework 3.5 - 摘自网络
  7. html5中的一些标签学习总结
  8. excel表格vlookup函数怎么用_只会Vlookup函数Out了!Excel所有查找公式全在这儿(共16大类)...
  9. 《Conditional BERT Contextual Augmentation》论文笔记
  10. Python基础-Python实现阶乘计算器
  11. Typora设置标题自动标号
  12. cent os7目录详解
  13. Indesign多媒体富交互插件【MagBuilder】与iOS app 【MagViewer】介绍
  14. 维修汽车服务器,汽修门店没有这些工具,千万别帮车主维修汽车电脑!
  15. 看电子合同从“0”到“1”蜕变之路
  16. 超级实习生内推的实习offer,实习经历企业认可吗?
  17. 爬虫-基于requests模块xpath解析爬取豆瓣即将上映电影目录
  18. jQuery源码逐行分析学习01(jQuery的框架结构简化)
  19. 1999年法国版的《基督山伯爵》国语
  20. linux mqtt物联网系统

热门文章

  1. spring5 配置log系统MAVEN
  2. if语句 power query_PowerQuery学习:认识M函数
  3. flink source 同步_如何生成 Flink 作业的交互式火焰图?
  4. 安装Linux双系统取消快速启动,为什么在双启动时禁用Windows 8上的快速启动?
  5. python信号处理教程_python 之信号Signal|python3教程|python入门|python教程
  6. mysql多表分析_mysql多表查询实例结果及分析-2017.12.14
  7. python opencv实时显示测量数据_python OpenCV 宽度测量
  8. 发生了变化 触发器函数不能读它_2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...
  9. mysql可以关联视图_Mysql 五: 数据库自关联、视图
  10. python中字典的常用函数_python中得字典和常用函数总结