写作动机
在日常的开发中,有许多地方都需要用到注解(比如
@Override
,@Deprecated
等),然后有人提到数据库关系映射(ORM)中使用注解效率会比较低。带着一些问题跟一些兴趣,决定对注解做一些了解性的学习。这篇文章会介绍注解的基本概念,下一篇文章会介绍Java中的系统注解的使用方法,然后会有一篇文章讲解如何自定义注解跟提解注解中的值,最后会有一个简单的ORM实现原理介绍。也就是说会有几篇文章来介绍Java注解相关的知识。
概要
- 基本概念
- 注解作用
- 注解目的
- 可注解元素
注解作用
为数据提供元数据。
元数据:描述数据的数据,对数据及信息资源的描述性信息。
示例代码:
public class User extends BaseEntity{
@Column("id")
private String id = "123456";
}
比如上面的 User类 中的 id属性, 如果不加注解 @Column("id")
,那么它代表的仅仅的就是一个简单的类属性。
但这里 @Column("id")
注解给id加上了描述信息(id是数据库表中的列,列名为id),所以通过反射得到该属性的时候就知道该属性的描述信息(也就是知道它是代表数据库中的列,列名为id),然后就可以执行相应的数据库操作了。
所以说,注解的作用是为数据提供元数据(描述数据的数据)。
注解目的
注解也是有可见阶段的(编译时可见、构建时可见、运行时可见),所以不同阶段可见的注解有不同的目的,下面就简单介绍这三种注解。
-
编译时可见的注解可以用作编译时指令
-
比如
@Deprecated
(用于声明方法或类已经过时),编译器就会检查该注解然后给出相应提示,具体看下面代码(使用IntelliJ IDE)。 -
User.java
-
public class User extends BaseEntity{ @Column("id") private String id = "123456"; /** * 测试 @Deprecated 注解 */ @Deprecated public String deprecatedMethod(){ return "I am deprecatedMethod"; } }
-
Test.java
-
-
上面的代码中,
deprecatedMethod
方法就是被@Deprecated
(编译时可见注解,标示已过时)注解的方法。
当调用该方法时,编译器就会检测到deprecatedMethod
被@Deprecated
注解了,然后就会做一些提示操作(比如画横线)。
-
构建时可见的注解可以用作构建时指令
-
构建工具检测相关的注解并做相关的操作这方面知识不熟悉,没找到相关例子,如果您对这方面有比较好的理解可以跟我讨论。
-
运行时可见的注解可以用作运行时指令
-
运行时可见的注解可以通过反射机制获取到,一些ORM框架就是通过注解来实现数据库的一些操作的(后面会有具体的讲解,此处略)。
可注解元素
- 所有基本类型(int、float、long等)
- String
- Class
- enum
- Annotation
- 以及以上类型组成的数组
总结
本篇文章主要介绍了注解是什么,注解有什么作用,跟注解可以使用的元素。现在大家对注解有了一个比较基本的概念了解,后面还会有深入的注解知识学习。
思路脑图
完整的思维导图可以在我的github上面查找,如果觉得不错也可以给个star,地址为https://github.com/liujiescut/AndroidKnowledge
下一篇文章将介绍 Java中的系统注解的使用方法 。