1.什么是注解

  1. 注解的语法: @注解名称;
  2. 注解的作用: 用来替代 xml 配置文件; 在 Servlet 3.0 中就可以使用注解来代替配置文件;
  3. 注解是由框架来读取使用的;
  4. 所有的注解都是 Annotation 的子类;
  5. 简单说, 注解是给程序(框架)看到, 而注释是给人看的.

2. 注解的使用

  • 定义注解类: 框架的工作; 语法: public @interface MyAnnotation{....}.
  • 使用注解: 程序员的工作;
  • 读取注解(反射): 框架的工作;

3. 注解的属性

3.1 定义属性
  • 格式: 类型 属性名();
// 定义属性
@interface MyAnno2 {
int age(); // 定义属性 age
String name(); // 定义属性 name
String value() default "hello world!"; // value 是带有默认值的属性
}
3.2 使用注解时,给属性赋值
    @MyAnno2(age=100, name="zhangsan")
public class Demo{
......
}
3.3 属性名为 value 的特权
  • 当使用注解时, 如果只给名为 value 的属性赋值时,可以省略 "value="

    例如: @MyAnno(value="hello") 可以书写成 @MyAnno("hello")
3.4 注解属性的类型
  • 八种基本数据类型
  • String 类型
  • Enum 类型
  • Class 类型
  • 注解类型
  • 以上类型的一维数组类型
  • Integer 类型不可以
    @MyAnno2(
// 为注解属性赋值
a=100,
b="hello",
c=MyEnum1.A,
d=String.class,
e=@MyAnno3(aa=200,bb="world"),
f={"",""} // 如果数组中的元素个数为1时, 可以省略大括号
)
public class Demo{ } // 定义注解
@interface MyAnno2 {
int a();
String b();
MyEnum1 c(); // Enum 类型
Class d();
MyAnno3 e();
String[] f(); // 数组类型
} @interface MyAnno3 {
int aa();
String bb;
}

4. 注解的作用目标限定以及保留策略限定

4.1 注解的作用目标限定
  • 使用方式: 在定义注解时,给注解添加 @Target 注解;
    @Target(value={ElementType.Type, ElementType.METHOD, ElementType.FIELD})
@interface MyAnno2{ } // ElementType 是枚举类型
// 可选值: TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE,
// ANNOTATION, PACKAGE
4.2 保留策略
  • 源代码文件(SOURCE): 注解只能在源代码中存在,当编译时,就被忽略了;
  • 字节码文件(CLASS): 注解在源代码中存在,然后编译时,会把注解信息放到 class 文件,但 JVM 在加载类时,会忽略注解;
  • JVM (RUNTIME): 注解在源代码,字节码文件中存在,并且在 JVM 加载类时,会把注解加载到 JVM 内存中(它是唯一可反射注解!!)
    // 限定注解的保留策略, Retention 为枚举类型
@Retention(RetentionPolicy.RUNTIME)
@interface MyAnno2 {....}

参考资料:

Java 注解入门的更多相关文章

  1. Java注解入门

    注解的分类   按运行机制分:   源码注解:只在源码中存在,编译后不存在 编译时注解:源码和编译后的class文件都存在(如@Override,@Deprecated,@SuppressWarnin ...

  2. Java 注解 入门

    这几天在学习Spring3.x,发觉现在许多框架都用上了java注解功能,然后自己就对java注解这方面初步学习了一下. 首先,注解跟注释不是一个意思,也根本不是同一个事物. 注释就是我们平常平常中对 ...

  3. java注解入门(含源码下载)

    注解(Annotation)是从jdk1.5开始增加的特性.学习注解能够读懂框架的代码:让编程更加简洁,代码更加清晰. 注解概念:java提供了一种原程序中的元素关联任何信息和任何元数据的途径和方法. ...

  4. Java 注解入门实例 && 注解传參

    參考 概念:java提供了一种原程序中的元素关联不论什么信息和不论什么元数据的途径和方法 JDK内置系统注解: @Override 用于修饰此方法覆盖了父类的方法; @Deprecated 用于修饰已 ...

  5. [2]注解(Annotation)-- 深入理解Java:注解(Annotation)自定义注解入门

    转载 http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 深入理解Java:注解(Annotation)自定义注解入门 要深入学习 ...

  6. 深入理解Java:注解(Annotation)自己定义注解入门

    深入理解Java:注解(Annotation)自己定义注解入门 要深入学习注解.我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前.我们就必须要了解Java为我们提供的元注解和相关定义注解的 ...

  7. Spring框架入门之基于Java注解配置bean

    Spring框架入门之基于Java注解配置bean 一.Spring bean配置常用的注解 常用的有四个注解 Controller: 用于控制器的注解 Service : 用于service的注解 ...

  8. JAVA - Annotation 注解 入门

    Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个教程当中,我们将学习Java的注解,如何定制注解,注解的使用以及如何通过反射解析注解. Java1.5引入了注解,当前许 ...

  9. java注解基础入门

    前言 这篇博客主要是对java注解相关的知识进行入门级的讲解,包括**,核心内容主要体现在对java注解的理解以及如何使用.希望通过写这篇博客的过程中让自己对java注解有更深入的理解,在工作中可以巧 ...

随机推荐

  1. 基于Jekyll的博客模板

    代码地址如下:http://www.demodashi.com/demo/13147.html 效果 环境配置 环境 Windows 10 Git Bash 安装ruby 下载rubyinstalle ...

  2. ajax+webapi上传图片问题

    自己想写一个原生的JS的图片上传,不想一直只是使用上传文件的框架 网上有很多jquery上传图片上传文件的插件,但是要不是用特定的后台框架接收,要不就是只能上传图片,不是文件,还有一些其他的问题,所以 ...

  3. Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc

    Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc 1.1. Visual Studio2 1.2. ...

  4. Angularjs学习笔记6_table1

    <!DOCTYPE html><html lang="en" ng-app="plunker"><head>    < ...

  5. spark-streaming-kafka-0-10源码分析

    转发请注明原创地址http://www.cnblogs.com/dongxiao-yang/p/7767621.html 本文所研究的spark-streaming代码版本为2.3.0-SNAPSHO ...

  6. C# 通过 AppDomain 应用程序域实现程序集动态卸载或加载

    AppDomain 表示应用程序域,它是一个应用程序在其中执行的独立环境.每个应用程序只有一个主应用程序域,但是一个应用程序可以创建多个子应用程序域. 因此可以通过 AppDomain 创建新的应用程 ...

  7. shell脚本之read工具

    #!/bin/bash # -*- coding: utf-8 -*- # echo -n "please input your name: " read name echo &q ...

  8. int和Integer差别

    种原始数据类型之中的一个. Java为每一个原始类型提供了封装类.Integer是java为int提供的封装类. 原始数据类型包含byte.int.char.long.float.double.boo ...

  9. abp的权限与导航菜单的关系

    原来以为各是各的,所以就有了第一个版本.Getallmentus.然后注入了role,当然失败了.获取所有的菜单.一直在思考在什么地方设置菜单是否展示呢? 后面看了源码.才发现自己错了. UserNa ...

  10. 关于fork()父子进程返回值的问题

    我们都知道,父进程fork()之后返回值为子进程的pid号,而子进程fork()之后的返回值为0.那么,现在就有一个问题了,子进程fork()的返回值是怎么来的?如果子进程又执行了一遍fork()函数 ...