您的位置:首页 > 编程语言 > Java开发

java注解,反射实现抽象代码工作中实际运用

2017-05-10 19:08 561 查看
注解类:ApiFieldAnnotation.java

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface ApiFieldAnnotation {

Class fieldClassType();

boolean notNull();

int maxLength() default -1;

String fieldDesc();

int scale() default 0;

}

测试代码:
@Test
public void testMyTest() throws Exception {
MyBizPojo myBizPojo = new MyBizPojo();
myBizPojo.setAccount("1111111111");
myBizPojo.setName("CCCCCC");
List<MyReturnPojo> params = Lists.newArrayList();
java.lang.reflect.Field[] fields = myBizPojo.getClass().getDeclaredFields();
for (java.lang.reflect.Field field : fields) {
if (!field.isAnnotationPresent(ApiFieldAnnotation.class)) {
continue;
}
ApiFieldAnnotation annotation = field.getAnnotation(ApiFieldAnnotation.class);
field.setAccessible(true);
MyReturnPojo myReturnPojo =
new MyReturnPojo(field.getName(), annotation.fieldDesc(), annotation.notNull(), field.get(myBizPojo));
params.add(myReturnPojo);
}
params.forEach(p -> {
System.out.println(p);
});

}

@Data
private class MyBizPojo {
@ApiFieldAnnotation(fieldClassType = String.class, maxLength = 10, notNull = true, fieldDesc = "账号")
private String account;

@ApiFieldAnnotation(fieldClassType = String.class, maxLength = 10, notNull = true, fieldDesc = "名字")
private String name;
}

@Data
@AllArgsConstructor
@NoArgsConstructor
private class MyReturnPojo {
private String name;
private String nameZh;
private Boolean notNullFlag;
private Object defaultValue;
}

返回结果:
JxbkComponentTest.MyReturnPojo(name=account, nameZh=账号, notNullFlag=true, defaultValue=1111111111)

JxbkComponentTest.MyReturnPojo(name=name, nameZh=名字, notNullFlag=true, defaultValue=CCCCCC)

备注:

 Field[]
getDeclaredFields()
 

          返回 
Field
 对象的一个数组,这些对象反映此 
Class
 对象所表示的类或接口所声明的所有字段。
 boolean
isAnnotationPresent(Class<?
extends Annotation> annotationClass)
 

          如果指定类型的注释存在于此元素上,则返回 true,否则返回 false

<T extends Annotation> 

T
getAnnotation(Class<T> annotationClass)
 

          如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null
Object
get(Object obj)
 

          返回指定对象上此 
Field
 表示的字段的值
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: