```java
package reflect.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 在注解上我们可以使用java预定义的注解来规范某些操作,常用的有:
* @Target 用于指定当前注解可以被应用的位置。
* 不指定该注解时,我们定义的注解可以被应用于任何可以使用注解的位置,
* 比如:类上,方法上,构造器上,属性上,参数上等
* 可以通过为Target注解传入参数来指定可以使用的特定位置,这些位置
* 都被ElementType规定。
* @Target(ElementType.TYPE)
* 只能在类上使用该注解
*
* @Target({ElementType.TYPE,ElementType.FIELD})
* 可以在类上或属性上使用该注解(多个位置时要以数组形式表达)
*
* @Retention 用于指定当前注解的保留级别,有三个可选值
* RetentionPolicy.SOURCE 注解仅保留在源代码中
* RetentionPolicy.CLASS 注解保留在字节码中,但是不可被反射机制访问(默认保留级别)
* RetentionPolicy.RUNTIME 注解保留在字节码中,可被反射机制访问
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface AutoRunClass {
}
```
```java
package reflect.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AutoRunMethod {
/*
注解中可以定义参数
格式为:
类型 参数名() [default 默认值]
默认值是可选的,不是必须指定的。如果指定了默认值,那么使用注解时
可以不传入该参数,此时参数使用这个默认值。
如果参数没有指定默认值,那么使用注解时必须为这个参数赋值。
如果注解中只有一个参数时,参数名建议选取"value"。这样外界在使用
该注解时,传递参数则不需要指定参数名,可以直接写作:
@AutoRunMethod(5) 此时value的值就是5
如果该参数名不叫value,比如叫:
int num() default 1;
则使用注解时为该参数传递值时必须写作:
@AutoRunMethod(num=5)
*/
int value() default 1;
/*
一个注解中可以定义多个参数,当使用该注解时传参格式为:name=value
@AutoRunMethod(num=1,name="张三")
或
@AutoRunMethod(name="张三",num=1) (传参顺序不所谓)
*/
// int num() default 1;
// String name();
/*
并且两个以上参数(含两个)时,其中某一个参数名指定为value,传参时也
必须指定该参数名
例如:
@AutoRunMethod(value=1,name="张三")
或
@AutoRunMethod(name="张三",value=1)
*/
// int value() default 1;
// String name();
}
```
定义基本注解
最新推荐文章于 2024-08-23 15:54:50 发布
本文介绍了Java注解中的@Target和@Retention两个关键元注解的用法。@Target用于指定自定义注解可以应用的位置,如TYPE、METHOD等;@Retention定义注解的保留策略,包括SOURCE、CLASS和RUNTIME,影响注解在编译后的可见性和作用范围。同时,文章还探讨了注解中定义参数的方法和规则。
摘要由CSDN通过智能技术生成