code: private Map<String, Class<?>> unsatisfiedNonSimpleProperties(BeanDefinition mbd) {
      Map<String, Class<?>> properties = CollectUtils.newHashMap();
      if (mbd.isAbstract()) return properties;
      Class<?> clazz = ClassLoaders.loadClass(((GenericBeanDefinition) mbd).getBeanClassName());
  
      PropertyValues pvs = mbd.getPropertyValues();
      for (Method m : Reflections.getBeanSetters(clazz)) {
        String propertyName = Strings.uncapitalize(m.getName().substring(3));
        Class<?> propertyType = m.getParameterTypes()[0];
        if (!pvs.contains(propertyName) && !propertyType.isArray()
            && !propertyType.getName().startsWith("java.")) {
          properties.put(propertyName, propertyType);
        }
      }
      return properties;
    }
docs: <p>
  Find unsatisfied properties
  </p>
  Unsatisfied property is empty value and not primary type and not starts with java.
  
  @param mbd