private void loadBeanInternal(String loadProperty, BeanLoader loader) {

    if (loaded && (loadedProps == null || loadedProps.contains(loadProperty))) {
      // race condition where multiple threads calling preGetter concurrently
      return;
    }

    if (disableLazyLoad) {
      loaded = true;
      return;
    }

    if (lazyLoadFailure) {
      // failed when batch lazy loaded by another bean in the batch
      throw new EntityNotFoundException("Bean has been deleted - lazy loading failed");
    }

    if (lazyLoadProperty == null) {

      lazyLoadProperty = loadProperty;

      if (nodeUsageCollector != null) {
        nodeUsageCollector.setLoadProperty(lazyLoadProperty);
      }

      loader.loadBean(this);

      if (lazyLoadFailure) {
        // failed when lazy loading this bean
        throw new EntityNotFoundException("Bean has been deleted - lazy loading failed");
      }

      // bean should be loaded and intercepting now. setLoaded() has
      // been called by the lazy loading mechanism
    }
  }