1.自定义注解的使用场景
Java自定义注解一般使用场景为:自定义注解+拦截器或者AOP,使用自定义注解来自己设计框架,使得代码看起来非常优雅。
2.注解的基本知识
注解分为两种,元注解和自定义注解。
Target:描述了注解修饰的对象范围,取值在javalangannotationElementType定义,常用的包括:
- METHOD:用于描述方法
- PACKAGE:用于描述包
- PARAMETER:用于描述方法变量
- TYPE:用于描述类、接口或enum类型·FILE:用于描述字段(bean类字段)
Retention:表示注解保留时间长短。取值在javalangannotationRetentionPolicy中,取值为:
- SOURCE:在源文件中有效,编译过程中会被忽略
- CLASS:随源文件一起编译在class文件中,运行时忽略
- RUNTIME:在运行时有效,只有定义为RetentionPolicyRUNTIME时,我们才能通过注解反射获取到注解。
3.使用方法
假设我们要自定义一个注解,它用在字段上,并且可以通过反射获取到,功能是用来描述字段的高度和作用。可以定义如下:
- 定义注解
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyField {
//描述信息
String descMsg();
//高度
int height();
}
- 反射获取注解
public class MyFieldTest {
//使用我们的自定义注解
@MyField(descMsg = "用户", height = 184)
private String username;
@Test
public void testMyField() {
// 获取类模板
Class testClass = MyFieldTest.class;
// 获取所有字段
for (Field f : testClass.getDeclaredFields()) {
//判断这个字段是否有MyField注解
if (f.isAnnotationPresent(MyField.class)) {
MyField annotation = f.getAnnotation(MyField.class);
System.out.println("字段:["+ f.getName()+"],描述:["+ annotation.descMsg()+"],长度:["+ annotation.height() +"]");
}
}
}
}
- 运行结果
字段:[username],描述:[用户],长度:[184]
Process finished with exit code 0
更多推荐
springboot自定义注解
发布评论