code: public void destroy() {
          if (!inited) {
              return;
          }
          final ClassLoader currentLoader = Thread.currentThread().getContextClassLoader();
          Thread.currentThread().setContextClassLoader(classLoader);
          try {
              for (int i = getComponentDefSize() - 1; 0 <= i; --i) {
                  try {
                      getComponentDef(i).destroy();
                  } catch (Throwable t) {
                      logger.error("ESSR0017", t);
                  }
              }
              for (int i = getChildSize() - 1; 0 <= i; --i) {
                  getChild(i).destroy();
              }
  
              componentDefMap = null;
              componentDefList = null;
              namespace = null;
              path = null;
              children = null;
              childPositions = null;
              parents = null;
              descendants = null;
              externalContext = null;
              externalContextComponentDefRegister = null;
              metaDefSupport = null;
              classLoader = null;
              root = this;
              inited = false;
          } finally {
              Thread.currentThread().setContextClassLoader(currentLoader);
          }
      }
docs: =======