修改帶有將帶有annotation的變量
需要setAccessible(true)後才能修改變量的值
public BaseCrawlerRequest convertToCrawlerBean(BaseCrawlerRequest bean) throws Exception {
Field nameField = getNameField(bean.getClass());
nameField.setAccessible(true);
String nameValue = (String) nameField.get(bean);
if (StringUtils.isNotEmpty(this.type)) {
if (StringUtils.isNotEmpty(nameValue)) {
nameField.set(bean, this.type + EnumConstant.CONNECT_FIELD + nameValue);
} else {
nameField.set(bean, this.type);
}
}
return this;
}
找到帶有@NameField的Field
private Field getNameField(Class clazz) throws Exception {
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
for (Annotation ann : field.getDeclaredAnnotations()) {
if (ann.annotationType() == NameField.class) {
return field;
}
}
}
throw new Exception("BaseCrawlerRequest getgetNameField failed. no annotation @NameField in " + clazz.getName());
}