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. unsupported major.minor version 解决方法

        转载自http://hi.baidu.com/fatchong/blog/item/191da23b478bbfef15cecbae.html         一直以来都是用jdk1.5,这次 ...

  2. Transact-SQL 参考(数据库引擎)

    记录下这个地址: https://technet.microsoft.com/zh-cn/library/bb510741(v=sql.105).aspx

  3. kafka分布式搭建

    kafka分布式搭建 (192.168.230.129)master (192.168.230.130)slave1 (192.168.230.131)salve2 在master.slave1.sl ...

  4. Session值的存储与删除

    private static void SetSession<T>(string key, T val) { HttpContext.Current.Session[key] = (T)v ...

  5. SpringCloud系列十二:手动创建Feign

    1. 回顾 上文讲解了自定义Feign.但是在某些场景下,前文自定义Feign的方式满足不了需求,此时可使用Feign Builder API手动创建Feign. 本文围绕以下场景,为大家讲解如何手动 ...

  6. atitit.RandomAccessFile rws rwd 的区别于联系

    atitit.RandomAccessFile rws rwd 的区别于联系 1. Rw rws  rwd1 2. "rws" 模式1 3. rwd"模式2 1. Rw  ...

  7. 看好你的门-攻击服务端(3)-SOAP注入攻击

    首先须要声明,本文纯属一个毫无远见和真才实学的小小开发者的愚昧见解.仅供用于web系统安全方面的參考. 1.SOAP注入攻击 server端的XML解析引擎从client接收输入信息.这里指的clie ...

  8. Visual Studio - 创建和使用动态库

    一.VS2013 创建动态库 1.1 新建项目 1.2.在Win32应用程序向导对话框上勾选“DLL”和“空项目”复选框,点完成 1.3 .添加对应的.C文件和.h文件 1.4 在.h文件中添加如下代 ...

  9. MySQL获取Schema表名和字段信息

    MySQL获取Schema表名和字段信息 获取表名 select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,TABLE_COMMENT,CREATE_TIME,U ...

  10. bonjour的使用

    os中,bonjour是一个零配置的网络服务分发服务器与客户端.   在使用bonour之前你应该明白的是,bonjour并不负责数据传输,只负责发布服务与检索服务,并在客户端获取服务端的信息.   ...