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> T create(Class<T> 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()); } }