code: public static void setProperty(Object bean, String field, Object value) {
  		INSTANCE.checkParameters(bean, field);
  
  		try {
  			INSTANCE.setPropertyValue(bean, field, value);
  		} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
  			throw handleReflectionException(bean.getClass(), field, e);
  		}
  	}
docs: Set bean's property value. The sequence of searches for setting a value is as follows:
  <ol>
  <li>All class fields are found using {@link ClassUtils#getClassFields(Class)}</li>
  <li>Search for a field with the name of the desired one is made</li>
  <li>If a field is found and it's a non-public field, the value is assigned using the accompanying setter</li>
  <li>If a field is found and it's a public field, the value is assigned using the public field</li>
  <li>If a field is not found, a search for a getter is made - all class getters are found using
  {@link ClassUtils#getClassFields(Class)}</li>
  <li>From class getters, an appropriate getter with name of the desired one is searched</li>
  <li>Using the found getter, an accompanying setter is being used to assign the value</li>
  </ol>
  <p>
  <b>Important</b>
  </p>
  <ul>
  <li>Each setter should have accompanying getter.</li>
  <li>If a value to be set is of type {@link List} and the property type is {@link Set}, the collection is changed to {@link
  Set}</li>
  <li>If a value to be set is of type {@link Set} and the property type is {@link List}, the collection is changed to {@link
  List}</li>
  </ul>
  
  @param bean  bean to be accessed
  @param field bean's fieldName
  @param value value to be set