code: @SuppressWarnings("unchecked")
      protected void initialise() {
          if (getBean() == null) {
              return;
          }
  
          this.beanClass = (Class<T>) bean.getClass();
          if (!(getBean() instanceof Map)) {
              Class currentClass = beanClass;
  
              List<Class> classes = Lists.newLinkedList();
  
              while (currentClass != null) {
                  classes.add(0, currentClass);
                  currentClass = currentClass.getSuperclass();
              }
  
              for (Class clazz : classes) {
                  for (Method m : clazz.getMethods()) {
                      String name = m.getName();
                      Class rtype = m.getReturnType();
                      if (void.class != rtype && !name.equals("getClass")) {
                          boolean getType = name.startsWith(HandleType.GET.name().toLowerCase());
                          boolean isType = false;
                          if (!getType) {
                              isType = name.startsWith(HandleType.IS.name().toLowerCase())
                                      && (Boolean.class.isAssignableFrom(rtype) || rtype == boolean.class);
                          }
                          if (getType || isType) {
                              String fn = transformPropertyName(StringUtils.uncapitalize(name.substring(isType ? 2 : 3)));
                              if (StringUtils.isNotBlank(fn)) {
                                  types.put(fn, rtype);
                                  readHandleType.put(fn, isType ? HandleType.IS : HandleType.GET);
                              }
                          }
                      }
                  }
              }
          } else {
              if (getBean() instanceof BeanMap) {
                  types = ((BeanMap) getBean()).types;
                  readInvokers = ((BeanMap) getBean()).readInvokers;
                  writeInvokers = ((BeanMap) getBean()).writeInvokers;
                  beanClass = (Class<T>) bean.getClass();
                  bean = (T) ((BeanMap) bean).getBean();
              } else {
                  Set<Map.Entry> entries = ((Map) getBean()).entrySet();
                  for (Map.Entry entry : entries) {
                      String name = transformPropertyName((String) entry.getKey());
                      if (StringUtils.isNotBlank(name) && entry.getValue() != null) {
                          types.put(name, entry.getValue().getClass());
                      }
                  }
              }
          }
      }
docs: <p>initialise.</p>