final Class<?> clazz = bean.getClass();
ReflectionUtils.doWithMethods(clazz, new ReflectionUtils.MethodCallback() {
public void doWith(Method method) {
//Annotation annotation = method.getAnnotation(getPropertyAnnotationType());
Property annotation = (Property) method.getAnnotation(getPropertyAnnotationType());
if (annotation != null) {
if (Modifier.isStatic(method.getModifiers())) {
throw new IllegalStateException("Property annotation is not supported on static methods");
}
if (Modifier.isPrivate(method.getModifiers())) {
throw new IllegalStateException("Property annotation is not supported on private methods");
}
if (method.getParameterTypes().length == 0) {
throw new IllegalStateException("Property annotation requires at least one argument: " + method);
}
PropertyDescriptor pd = BeanUtils.findPropertyForMethod(method);
if (pd != null) {
String propName = annotation.name();
if ("".equals(propName)) {
injectProperty(bean, pd, getPropertyObj(pd.getPropertyType(), pd.getName()));
} else {
injectProperty(bean, pd, getPropertyObj(pd.getPropertyType(), propName));
}
}
}
}
});
ReflectionUtils.doWithFields(clazz, new ReflectionUtils.FieldCallback() {
public void doWith(Field field) {
//Annotation annotation = field.getAnnotation(getPropertyAnnotationType());
Property annotation = (Property) field.getAnnotation(getPropertyAnnotationType());
if (annotation != null) {
if (Modifier.isStatic(field.getModifiers())) {
throw new IllegalStateException("Property annotation is not supported on static fields");
}
if (Modifier.isPrivate(field.getModifiers())) {
throw new IllegalStateException("Property annotation is not supported on private fields");
}
ReflectionUtils.makeAccessible(field);
Object propertyObj = null;
String propName = annotation.name();
if ("".equals(propName)) {
propertyObj = getPropertyObj(field.getType(), field.getName());
} else {
propertyObj = getPropertyObj(field.getType(), propName);
}