code: @SuppressWarnings("unchecked")
      public static <T> Bean<T> forClass(Class<T> beanClass) {
          if (beanClass == null) {
              throw new NullPointerException("Cannot instrospect a bean with a 'null' beanClass.");
          }
  
          Bean bean;
          SoftReference<Bean<?>> softReference = beansCache.get(beanClass);
  
          if (softReference == null) {
              bean = new Bean(beanClass);
              beansCache.put(beanClass, new SoftReference<Bean<?>>(bean));
          } else {
              bean = softReference.get();
  
              if (bean == null) {
                  bean = new Bean(beanClass);
                  beansCache.put(beanClass, new SoftReference<Bean<?>>(bean));
              }
          }
  
          return bean;
      }
docs: Introspects a {@link Class} or an interface and learns about all
  its {@link Property} elements.
  
  <p> If the target type has been previously analized then the {@link Bean}
  instance is retrieved from a thread-safe {@link SoftReference} cache.
  
  @param beanClass the class or interface to analize
  @param <T>       the bean's type.
  @return a {@link Bean} object describing the target class or interface
  @throws NullPointerException if the given beanClass parameter is {@code null}