注解
* 注解在开发中常被我们利用到反射机制中,辅助反射机制做更多灵活的操作
* 注解在如今JAVA流行的框架中被大量的营养,简化了以前繁琐的配置工作·
* 注解可以在:
* 类上,属性上,方法上,构造器上,以及参数上使用
* 可以通过java内置的注解@Target来说明当前注解可以应用的位置,对应的值被定义在ElementType上
* 例如:
@Target(ElementType.TYPE) 注解只能被用于类上
@Target({ElementType.TYPE,ElementType.METHOD}) 注解只能被用于类上或方法上
* 当可以用于多个位置时,需要定义成数组的方式包含所有ElementType的值,即"{}"包含
*** @Retention注解:用于标注当前注解的保留级别,有三个选项**
*** RetentionPolicy.SOURCE 注解仅保留在源码中**
*** RetentionPolicy.CLASS 注解保留在字节码中,但是反射机制不能调用**
*** RetentionPolicy.RUNTIME 注解保留在字节码中,并且可以被反射机制所使用**
*** 当不指定@Retention时,默认的保留级别为CLASS,因此我们通常都需要明确指出保留级别为RUNTIME**
*/
@Target({ElementType.TYPE,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {
}
/**
*** 注解可以定义参数**
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunMethod {
/*
定义参数的格式为:
格式:类型 参数名() [default 默认值]
注:default可选,用于为当前参数定义默认值。如果不指定,则使用注解时必须为此参数赋值。
使用注解传参时格式:
@注解名(参数名1=参数值1[,参数名2=参数值2,…])
如果注解@AutoRunMethod只有一个参数,且参数名为num时,那么使用时格式如下:
@AutoRunMethod(num=1)
=重点=
如果注解中只有一个参数,参数名建议选取value,这样的好处是,使用时可以不指定参数名,如:
@AutoRunMethod(1)
如果指定了默认值,则可以不指定参数,例如:
@AutoRunMethod() 此时注解中参数的使用default的默认值
*/
//为注解定义一个int型的参数
// int num() default 1;//一个参数时,参数名不建议选取value以外的名字。
int value() default 1;
}