1、定义注解类
@Documented
@Inherited
@Target({ElementType.FIELD,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IniterValue {
public String value() default "";
}
2、定义使用注解的类
@Data
public class User {
@IniterValue(value = "2")
private Integer age;
@IniterValue(value = "小明")
private String name;
}
3、定义注解解析器
public class UserFactory {
public static T create(Class t) throws IllegalAccessException, InstantiationException {
T t1 = t.newInstance();
Field[] fields = t1.getClass().getDeclaredFields();
for (Field field:fields) {
if(field.isAnnotationPresent(IniterValue.class)){
IniterValue annotation = field.getAnnotation(IniterValue.class);
try {
field.setAccessible(true);
Class> type = field.getType();
Object obj=null;
if(type == Integer.class){
obj = Integer.valueOf(annotation.value());
}
if(type==String.class){
obj=annotation.value();
}
field.set(t1,obj);
// method.invoke(t1,annotation.value(),annotation.intValue());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
return t1;
}
}
4、测试
public class Test {
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
User user = UserFactory.create(User.class);
System.out.println(user.getAge());
}
}
标签:教程,java,自定义,value,public,field,IniterValue,annotation,class
来源: https://www.cnblogs.com/liubaihui/p/10762680.html