笔记来源:IMOOC Java注解

注解的分类

  • 按照运行机制分

    • 源码注解:注解只在源码中存在,编译成 .class 文件就不存在了
    • 编译时注解:注解在源码和 .class 文件中都存在
    • 运行时注解:在运行阶段还起作用,甚至会影响运行逻辑的注解
  • 按照来源分

    • 来自JDK的注解
    • 来自第三方的注解
    • 我们自己定义的注解
  • 元注解:给注解进行注解

自定义注解

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description { // 使用 @interface 关键字定义注解String desc(); // 成员以无参无异常方式声明String author();int age() default 18; // 可以用 default 为成员指定一个默认值
}

自定义注解的语法要求

  • 使用 @interface 关键字定义注解
  • 成员以无参无异常方式声明
  • 可以用 default 为成员指定一个默认值
  • 成员类型是受限的,合法的类型包括原始类型及 StringClassAnnotationEnumeration
  • 如果注解只有一个成员,则成员名必须取名为 value(),在使用时可以忽略成员名和赋值号 =
  • 注解类可以没有成员,没有成员的注解称为标识注解

注解的注解(元注解)

  • @Target:注解的作用域

    • 包、类、字段、方法、方法的参数、局部变量
  • @Retention:注解的生命周期

    • SOURCE:只在源码显示,编译时会丢弃
    • CLASS:编译时会记录到 class 中,运行时忽略
    • RUNTIME:运行时存在,可以通过反射读取
  • @Inherited:标识性注解,允许子类继承(接口实现是没有任何作用的,只会继承类注解,不会继承其他如方法的注解)
  • @Document:生成 javadoc 时会包含注解

使用自定义注解

@Description(desc = "I am eyeColor", author = "Mooc boy", age = 18)
public String eyeColor() {return "red";
}

@<注解名>(<成员名1> = <成员值1>, <成员名2> = <成员值2>, ...)

解析注解

概念:通过反射获取类、函数或成员上的运行时注解信息,从而实现动态控制程序运行的逻辑。

@Description(desc = "I am Example", author = "Mooc boy", age = 18)
public class Example {@Description(desc = "I am eyeColor", author = "Mooc boy", age = 18)public String eyeColor() {return "red";}
}
try {// 1. 使用类加载器加载类Class c - Class.forName("Example");// 2. 找到类上面的注解boolean isExist = c.isAnnotationPresent(Description.class);if (isExist) {// 3. 拿到注解实例Description d = (Description) c.getAnnotation(Description.class);System.out.println(d.desc());}Method[] ms = c.getMethods();// 4-1. 找到方法上的注解for (Method m: ms) {boolean isMExist = m.isAnnotationPresent(Description.class);if (isMExist) {Description d = (Description) c.getAnnotation(Description.class);System.out.println(d.desc());}}// 4-2. 找到方法上的注解for (Method m: ms) {Annotation[] as = m.getAnnotations();for (Annotation a: as) {Description d = (Description) a;System.out.println(d.desc());}}
} catch (Exception e) {e.printStackTrace();
}

总结

  1. 认识注解
  2. 注解的作用范围 @Target 和生命周期 @Retention

    • 作用范围:包、类、字段、方法、方法的参数、局部变量
    • 生命周期:源文件、编译时、运行时
  3. 能读懂注解
  4. 能在实际项目中用注解解决问题,并能自定义注解

【Java注解】注解基础相关推荐

  1. java 继承 注解_在java中实现组合注解原理分析(注解继承)

    今天在自定义注解的时候,原计划实现一个类似于Spring中的注解@Component的功能,如果稍有留意一下,会发现,在Spring中我们常见的注解,其实都继承了@Component注解:如下图所示: ...

  2. 深入理解Java:注解(Annotation)--注解处理器

    如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...

  3. springmvc教程--注解开发基础详解

    springmvc教程系列 springmvc史上最好教程(2) springmvc史上最好教程(1) 一. 注解开发-基础 1.1 需求 使用springmvc+mybatis架构实现商品信息维护. ...

  4. 深入理解Java:注解(Annotation)基本概念、自定义注解、注解解析器

    深入理解Java:注解(Annotation)基本概念 什么是注解(Annotation): Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息和着任何元数据(metadat ...

  5. 深入理解Java:注解

    注解作用:每当你创建描述符性质的类或者接口时,一旦其中包含重复性的工作,就可以考虑使用注解来简化与自动化该过程. Java提供了四种元注解,专门负责新注解的创建工作. 元注解 元注解的作用就是负责注解 ...

  6. 深入理解Java:注解(Annotation)

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 1.什么是注解(Annotation) Annotation(注解)就是Java提供了一种元程序中的元素关联任何信息 ...

  7. 通过Java反射获取对象上的注解,java反射注解妙用-获取所有接口说明

    原标题:java反射注解妙用-获取所有接口说明 转载请注明出处:https://www.cnblogs.com/wenjunwei/p/10293490.html 前言 最近在做项目权限,使用shir ...

  8. java静态注解处理器_深入理解Java:注解(Annotation)--注解处理器

    如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...

  9. java method 注解_JAVA 注解详解及简单实例

    JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档  这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖 ...

  10. 【Java】注解入门

    本文作为注解的入门文章,主要向读者介绍注解的基本概念与用法,目的还是能够看懂JDK源代码的注解相关代码. 主要内容有:初步了解一下注解的定义:JDK提供的注解:自己写一个注解:用于自己写注解时用的注解 ...

最新文章

  1. java中文乱码的解决
  2. 【数字信号处理】傅里叶变换性质 ( 傅里叶变换时移性质示例 )
  3. POPUP_TO_DECIDE
  4. Apache错误日志提示AH02004: SSL Proxy: Peer certificate is expired
  5. 主板没有rgb接口怎么接灯_纯白信仰打造RGB主机,四件套提升100%性能-Thermaltake...
  6. Linux运维基础命令笔试题
  7. 台积电:如果不能向华为销售芯片,其他订单可快速取代华为空缺
  8. iOS:quartz2D绘图小项目(涂鸦画板)
  9. C++ 数据结构,vector与栈介绍
  10. 南信大校园网稳定|多拨|软路由|硬路由|保姆级教学|一步到位|openwrt|pandavan老毛子
  11. 动态规划,计算股票最大收益
  12. 《商君列传第八》–读书总结
  13. 国家计算机二级和省计算机二级的区别?
  14. R语言波士顿房价分析
  15. Application Server was not connected before run configuration stop, reason: javax.management.Instanc
  16. RankNet学习思路+损函感悟+\pi \xu 学xi+交叉熵损函详
  17. Java设计模式----创建者模式
  18. 亚马逊(Amazon)新接口SP-API和PII受限信息的开发者申请
  19. 串联谐振耐压试验装置技术参数和特点,如何选择
  20. Ubuntu 安装shutter

热门文章

  1. 大厂不一定要进,算法必须要学!精选算法文章 89 篇
  2. BEM 实战之微信个人页面
  3. 我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承...
  4. 基于Composer Player 模型加载和相关属性设置
  5. 那些好用的小工具——Total Commander
  6. 手机影音第六天 自定义播放器页面的实现(按钮暂时未监听)
  7. SDN/NFV步入规模部署期 运营商拓智能化成大势所趋
  8. AC日记——热浪 codevs 1557 (最短路模板题)
  9. mysql性能优化学习笔记-存储引擎
  10. [GDUT 决赛]--GCD,LCM——我是好人(数论)