1.获取某个类的属性值
public static void main(String[] args) throws Exception {
User u = new User();
u.setAddress("Beijing");
Class<?> c = u.getClass();
Method m = c.getDeclaredMethod("getAddress");
System.out.println(m.invoke(u));
}
2.查找某个类是否有该属性。
// Helpers for fetchers of one field, method, or constructor
private static Field searchFields(Field[] fields, String name) {
String internedName = name.intern();
for (int i = 0; i < fields.length; i++) {
if (fields[i].getName() == internedName) {
return fields[i];
}
}
return null;
}
3.为某个类set值。
/**
* 自动填充为"对象o"最后修改人,最后修改时间.
* @author Belen
*/
public static void fillEdit(Object o){
Class<?> c = o.getClass();
Field lastModifyPersonField = searchFields(c.getDeclaredFields(), "lastModifyPerson");
try {
if (lastModifyPersonField != null) {
lastModifyPersonField.setAccessible(true); // 取消访问检查
lastModifyPersonField.set(o, RMSServer.USERNAME);
}
Field lastModifyTimeField = searchFields(c.getDeclaredFields(), "lastModifyTime");
if (lastModifyTimeField != null) {
lastModifyTimeField.setAccessible(true); // 取消访问检查
lastModifyTimeField.set(o, new Date());
}
} catch (Exception e) {
e.getMessage();
// no set.
}
}
4.获取某个类的某个字段的注解值
Glob注解
/**
* 获取国际化key。
* @author Belen
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Glob {
String key() default "";
}
实体类
@Glob(key = "stand.id")
@NotBlank(groups = { Update.class,Remove.class, Detail.class })
private String id;
通过反射获取stand.id
/**
* 获取某个类的注解字段。
* @author Belen
* @param o 对象
* @param name 属性
* @return
*/
public static String getKey(Object o, String name) {
Class<?> c = o.getClass();
Field [] field = c.getDeclaredFields();
String r = "";
for (Field f : field) {
if (f.getName().equals(name)) {
Glob t = (Glob) f.getAnnotation(Glob.class);
r = t.key();
break;
}
}
return r;
}