查看过好多的材料,对注解的定义大多数都称它为元数据,或者详细点是在代码中添加信息提供的一种形式化方法,使我们可在之后非常方便的使用这些元数据。
这里面提到了一些非常有意思的东西:
1.注解是一种形式化的方法,实际中必须要多个地方可以使用它。如果有且仅有一次,估计连定义注解的人都会考虑是不是应该删除掉它了。
2.元数据,元表示单元的意思,它表示一个基本的单位。它表示注解需要提供一种单元程序的处理。
3.当我们调用元数据的时候,一定是调用的某个单元程序的一整套处理。除非调用出了问题,中途退出。
Java本身内置了三种注解,大家可能都遇到过:
1.@Override :表示当前方法定义会覆盖超类的方法定义
2.@Deprecated : 表示当前的方法已经废弃或不建议使用的,但关闭编译器的警告信息
3.@SuppressWarnings : 关闭不当的编译器警告信息
当我们自己定义注解进行使用的时候,需要了解下面的这些说明:
@Target | 标示该注解可以用于神门地方。可能的ElementType参数包括: CONSTRUCTOR:构造器的声明 FIELD:域声明(包括enum实例) LOCAL_VARIABLE:局部变量声明 METHOD:方法声明 PACKAGE:包声明 PARAMETER:参数声明 TYPE:类、接口包括注解类型和enum声明 |
@Retention | 标示需要在什么级别保存该注解信息。可选的RetentionPolicy参数包括: SOURCE:注解将被编译器丢弃 CLASS:注解在class文件中可用,但会被VM丢弃 RUNTIME:VM将在运行期也保留注解,因此可以通过反射机制读取注解信息 |
@Documented | 将此注解包含在javadoc中 |
@Inherited | 允许子类继承父类中的注解 |
通过这些说明,我们可以知道spring提供的注解大概会是什么样子。
注解元素的说明
注解元素的可用类型如下:
1.所有基本类型(int, float, boolean等)
2.String
3.Class
4.enum
5.Annotation
6.以上类型的数组
注意:超出上面的类型范围会报错,也不允许使用任何包装类型。定义的元素默认值不能以null作为默认值。
同时注解也不接受继承的。
什么时候可以使用注解来解决问题呢?
回答:首先,需要有一套处理程序,但是处理程序只需要更改参数值或者注入方法就可以完成整套流程。
参考的例子:get请求处理,request请求处理,数据库查询处理
其次:是这种处理的使用频度较高。如果只是使用一次,放弃它吧。
注解的自定义语法请参考其他资料。