java注解示例

  public static User create() {
        User user = new User();

        // 获取User类中所有的方法(getDeclaredMethods也行)
        Method[] methods = User.class.getMethods();

        try {
            for (Method method : methods) {
                // 如果此方法有注解,就把注解里面的数据赋值到user对象
                if (method.isAnnotationPresent(Init.class)) {
                    Init init = method.getAnnotation(Init.class);
                    method.invoke(user, init.value());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return user;
    }

    public static User create1() {
        User user = new User();

        // 获取User类中所有的方法(getDeclaredMethods也行)
        Field[] fields = User.class.getDeclaredFields();

        try {
            for (Field field : fields) {
                if (field.isAnnotationPresent(Init.class)) {
                    Init init = field.getAnnotation(Init.class);
                    field.setAccessible(true);
                    field.set(user,init.value());
                    System.out.println(field.getName());
//                    if(field.getName().equals("name")){
//                        user.setName(init.value());
//                    }
//                    if(field.getName().equals("age")){
//                        user.setAge(init.value());
//                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return user;
    }
    public static void main(String[] args) throws IllegalAccessException,
            IllegalArgumentException, InvocationTargetException
    {
//        User user = UserFactory.create();
        User user =create1();

        System.out.println(user.getName());
        System.out.println(user.getAge());
    }
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Init {
    public String value() default "";
}

 

你可能感兴趣的:(java)