code: @Override
      public Object put(String name, Object value) {
          if (bean != null) {
              Object oldValue = get(name);
              Method method = getWriteMethod(name);
              if (method == null) {
                  throw new IllegalArgumentException("The bean of type: " + bean.getClass().getName() + " has no property called: " + name);
              }
              try {
                  Object[] arguments = createWriteMethodArguments(method, value);
                  method.invoke(bean, arguments);
  
                  Object newValue = get(name);
                  firePropertyChange(name, oldValue, newValue);
              } catch (InvocationTargetException e) {
                  throw new IllegalArgumentException(e.getMessage());
              } catch (IllegalAccessException e) {
                  throw new IllegalArgumentException(e.getMessage());
              }
              return oldValue;
          }
          return null;
      }
docs: Sets the bean property with the given name to the given value.
  
  @param name  the name of the property to set
  @param value the value to set that property to
  @return the previous value of that property