注解,即元数据,形式化地在代码中添加信息,把元数据与源代码文件结合在一起。注解可以完整地描述程序所需的信息。可以使用注解来简化和自动化重复的过程或代码
javaSE5有三种注解:
`@Override`表示当前方法将覆盖父类中的方法, `@Deprecated`表示使用当前元素时会发出警告, `@SuppressWarnings`关闭不必要的编译器警告信息
创建一个自定义注解时,有四种注解可以使用。
注解 != 注释
注解是源代码层面的东西
**元注解:**
定义注解时,需要使用一些元注解来修饰注解:
`@Target`表示定义的注解的使用域(是一个方法METHOD或一个域)
METHOD方法声明, CONSTRUCTOR构造器声明, FIELD域声明, LOCAL_VARIABLE局部变量声明, PACKAGE包声明, PARAMETER参数声明, TYPE类,接口,或枚举类型声明
`@Rectetion`定义注解的存在时间(源代码SOURCE,类文件CLASS,运行时RUNTIME)
定义的注解中没有方法的注解叫做标记注解maker annotation
`@DOcument`表示将此注解包含在Javadoc中
`@Inherit`允许子类继承父类中的注解
**注解的元素声明:**
元素可以使用的种类:1.所有基本数据类型;2.String;3.Class;4.enum;5.Annotation;6.以上5种的数组。*名义上不允许包装类型*,元素不能有不确定值null,至少有默认值。可以使用默认值为负数或者空字符串表示参数的不正确。
```java
@Target(ElementType.METHOD)
@RetentionPolicy(ElementType.RUNTIME)
public @interface UseCase{
public int id();
public String description() default "no description";
}
```
在使用该UseCase注解时,需要使用键值对的方式给出id和description
**编写创建注解处理器:**
注解处理器,读取注解,留一个方法接口
注解的属性为int,和String,int型的属性作为注解的标志,可以使用一个方法接口,参数为一个Integer的容器,一个Class对象。
```java
注解处理器接口:
public static void useCaseTracker(List useCase, Class> cl){...}
调用注解处理器:
useCaseTracker(new ArrayList, myUseCase.class);
```
class是一个关键字,不能作为参数。
**注解的扩展应用:**
框架应用:Spring框架,Spring freamwork,等等一系列。对象映射框架ORM,mybatis,hibernate等等。使用注解来简化和自动化重复代码。
**注解的应用理解:**
一般的自定义注解如果不使用注解处理器,则自定义的注解与注释没有什么区别。向代码中添加信息。添加注解处理器后,可以实施监控,对类,方法,参数,进行监控,处理使用了这些注解的方法的参数,对这些数据进行处理分析,可以打印日志,可以进行拦截,可以通过注解处理器进行代码复用。